您的位置:首页 > 其它

Mybatis插入时间没有时分秒只有年月日

2017-01-19 20:57 288 查看

起因

前几天单元测试发现,数据库中的日期类型字段只插入了不带时分秒的值。



Debug下来确认,入库前实体字段里存的时间值是正常的,立即猜测问题出在Mybatis里。xxxMapper.xml里是这么写的,

<if test="timeJoin != null">TIME_JOIN = #{timeJoin, jdbcType = DATE},</if>


推测

目测错误就是由”jdbcType = DATE”导致的。我去查看了一下Mybatis的TypeHandlerRegistry,发现关于时间类型的注册有以下几种:



测试

看到关于时间的JdbcType有TIMESTAMP、DATE和TIME,就用入参类型和JdbcType做交叉组合,得到如下测试结果:



总结

由上述测试结果可以总结,如果传入实体对象里的字段是java.util.Date或者java.sql.Date或者java.sql.Time或者java.sql.Timestamp,同时

(1) jdbcType并未指定,则返回日期和时分秒!

return new Date(sqlTimestamp.getTime());// Timestamp sqlTimestamp


(2) jdbcType指定为”JdbcType.DATE”,则只返回日期,不带时分秒!

return new java.util.Date(sqlDate.getTime());// java.sql.Date sqlDate


(3) jdbcType指定为”JdbcType.TIME”,则只有时分秒有效!

return new Date(sqlTime.getTime());// java.sql.Time sqlTime
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息