如何选择datetime mysql类型为java.time.LocalDateTime?

时间:2018-04-30 10:08:25

标签: java mysql spring spring-jdbc jdbctemplate

CREATE TABLE `datetimetest` (
 `id` int(11) NOT NULL,
 `thedatetime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `thetimestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8

org.springframework.jdbc.core.JdbcTemplate jdbcTemplate;
List<Map<String, Object>> generic = jdbcTemplate.queryForList("SELECT * FROM mytable);

问题:默认情况下,datetimetimestamp类型都会转换为java.sql.Timestamp

问题:如何告诉全局JdbcTemplatedatetime类型的任何sql列转换为java.time.LocalDateTime(因为它无论如何在mysql数据库中都没有时区)?

旁注:我知道可以显式解析结果集,例如:

rs.getObject(1, LocalDateTime.class));

但我正在寻找全球配置。

1 个答案:

答案 0 :(得分:1)

执行数据库调用(https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/core/RowMapper.html)时,您可以使用RowMapper的实现。如果要全局使用它,可以创建一个扩展JdbcTemplate的类,并覆盖该类中的getColumnMapRowMapper。虽然这可能需要您为所有数据类型定义它。

我们公司使用的另一个选项是我们有自己的帮助器类,它构建一个查询/行映射器等,它扩展到需要DAO的每个类,并且从传递给{{1的超类调用时我们需要的所有相关信息位来进行数据查询,包括该类的JdbcTemplate,所以所有列都是所需的数据类型。