
问题
最近在用 Spring Boot 重写 LightBlog,查询到的博客的 Date 属性的日期正常,但是时间始终为 00:00:00。
resultMap 映射如下:
1 |
<resultMap id="blogMap" type="Blog"> |
1 |
public class { |
既然日期是正常的,那么mapper映射应该是正常的。问题应该出在映射blogTime的语句:
1 |
<result property="blogTime" column="blog_time" javaType="Date" jdbcType="DATE"/> |
在数据库中 blog_time 的类型为 DateTime,但是查 MyBatis 的官方文档, jdbcType 中没有 DateTime 。
解决方法
MyBatis 中没有DateTime的 jdbcType,但是有 TIMESTAMP。把 jdbcType从 DATE 改成 TIMESTAMP 或者不设置。
那么MyBatis会把 Date 自动映射成TIMESTAMP。
正确写法:
1 |
<result property="blogTime" column="blog_time" javaType="Date"/> |
至于一开始为啥把 jdbcType 设置成 DATE,大概就是想当然的以为 javaType 的 Date 就是映射 数据库的 DATE 吧。MySQL 中的 DATE 是没有 time的,而 TIME 是没有 date 的,DATETIME 则是两者的整合,既有 date 又有 time。同时 TIMESTAMP 和 DATETIME 类似,但是范围更小,精度更大。




近期评论