将 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);
});
我在我的数据库中为市场定义了一些假期:
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);
});