将 sql 日期映射到 java.time.MonthDay 的列表

map sql date to list of java.time.MonthDay

我在我的数据库中为市场定义了一些假期:

MarketA | 2018-10-04
MarketA | 2018-10-05 
MarketB | 2018-02-15
MarketB | 2018-02-16

架构是:

CREATE TABLE dbo.MarketHolidays  
   (
     MarketName varchar(50) NOT NULL,    
     HolidayDate date NOT NULL
   )  

我希望将结果集映射到地图并将日期从 sql 查询解析为 Java MonthDay。每个市场都应该有一个带有假期列表的键。可以吗,因为我不知道如何映射和解析到 MonthDay

@Slf4j
@Component
public class HolidayServiceDAOImpl implements HolidayServiceDAO {

    @Autowired
    private JdbcTemplate jdbcTemplate


    @Override
    public Map<String, List<java.time.MonthDay>> getHolidays() {
        String sql = "select MarketName, HolidayDate from dbo.MarketHolidays ";
        Map<String, List<MonthDay>> holidays = jdbcTemplate.query(sql, ...);
    }
}

您无法随心所欲地直接获取地图。你需要做这样的事情

考虑到你有这样的 pojo

@Getter
@Setter
public class MarketHolidays {
  String  MarketName;
  Date holidayDate;

}

那么你的转换逻辑就是

String sql = "select * from dbo.MarketHolidays ";
List<MarketHolidays> marketHolidaysList = jdbcTemplate.jdbcTemplate.queryForList(sql, MarketHolidays.class);

 Map<String, List<MonthDay>> map = Maps.newHashMap();

 marketHolidaysList.forEach(m -> {
  Date holidayDate = m.getHolidayDate();
  LocalDate date = holidayDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
  MonthDay monthDay = MonthDay.of(date.getMonth(), date.getDayOfMonth());

  map.computeIfAbsent(m.getMarketName(), s -> new ArrayList<>()).add(monthDay);
});