首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将sql日期映射到java.time.MonthDay列表

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

Stack Overflow用户
提问于 2018-02-16 11:15:22
回答 1查看 120关注 0票数 2

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

代码语言:javascript
复制
MarketA | 2018-10-04
MarketA | 2018-10-05 
MarketB | 2018-02-15
MarketB | 2018-02-16

架构是:

代码语言:javascript
复制
CREATE TABLE dbo.MarketHolidays  
   (
     MarketName varchar(50) NOT NULL,    
     HolidayDate date NOT NULL
   )  

我希望将结果集映射到映射,并将sql查询中的日期解析为MonthDay。每个市场都应该有一个关键的假期清单。我不知道如何映射和解析到MonthDay,你能请你这样做吗?

代码语言:javascript
复制
@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, ...);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-16 12:03:09

你不能像你想要的那样直接得到地图。你需要这样做

考虑到你有这样的波乔

代码语言:javascript
复制
@Getter
@Setter
public class MarketHolidays {
  String  MarketName;
  Date holidayDate;

}

那么您的转换逻辑将是

代码语言:javascript
复制
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);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48825582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档