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);
问题:默认情况下,datetime
和timestamp
类型都会转换为java.sql.Timestamp
。
问题:如何告诉全局JdbcTemplate
将datetime
类型的任何sql列转换为java.time.LocalDateTime
(因为它无论如何在mysql数据库中都没有时区)?
旁注:我知道可以显式解析结果集,例如:
rs.getObject(1, LocalDateTime.class));
但我正在寻找全球配置。
答案 0 :(得分:1)
执行数据库调用(https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/core/RowMapper.html)时,您可以使用RowMapper
的实现。如果要全局使用它,可以创建一个扩展JdbcTemplate
的类,并覆盖该类中的getColumnMapRowMapper
。虽然这可能需要您为所有数据类型定义它。
我们公司使用的另一个选项是我们有自己的帮助器类,它构建一个查询/行映射器等,它扩展到需要DAO的每个类,并且从传递给{{1的超类调用时我们需要的所有相关信息位来进行数据查询,包括该类的JdbcTemplate
,所以所有列都是所需的数据类型。