【问题标题】:map sql date to list of java.time.MonthDay将 sql 日期映射到 java.time.MonthDay 列表
【发布时间】:2018-02-16 11:15:22
【问题描述】:

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

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, ...);
    }
}

【问题讨论】:

  • 我认为您应该从数据库中检索LocalDate 对象并使用MonthDay.from(localDateFromDatabase) 进行转换。

标签: java spring date jdbc jdbctemplate


【解决方案1】:

您无法按照自己的意愿直接获得地图。你需要做这样的事情

考虑到你有这样的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);
});

【讨论】:

  • 您能否根据来自jdbcTemplate.queryForList(sql) 的返回类型为List&lt;Map&lt;String, Object&gt;&gt; 编辑您的答案?
  • 我收到错误 Error:(35, 17) java: no suitable method found for collect(java.util.stream.Collector&lt;com.batch.domain.HolidayDescriptionModel,capture#1 of ?,java.util.Map&lt;java.lang.String,java.lang.Object&gt;&gt;) method java.util.stream.Stream.&lt;R&gt;collect(java.util.function.Supplier&lt;R&gt;,java.util.function.BiConsumer&lt;R,? super java.util.Map&lt;java.lang.String,java.lang.Object&gt;&gt;,java.util.function.BiConsumer&lt;R,R&gt;) is not applicable 我的模型是 HolidayDescriptionModel
  • 你使用的是哪个版本的java
  • 我使用的是 1.8 版本。请相应地进行编辑,以便我进行测试。如果可以在模型上使用 java.util.date 就更好了
  • List&lt;MarketHolidays&gt; marketHolidaysList = jdbcTemplate.jdbcTemplate.queryForList(sql, MarketHolidays.class); >> 列数不正确:预期为 1,实际为 2。这应该如何映射?
猜你喜欢
  • 2018-01-20
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-08
  • 2019-04-15
相关资源
最近更新 更多