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

起因

前几天测试发现,数据库中的日期类型字段只插入了不带时分秒的值。如果改为timestamp日期对了,但是时分秒不对了

最后网上查了发现是由于mybatis指定了数据类型jdbcType=DATE导致这种情况的,以前没指定的时候就有时分秒

百度查的原文信息如下:

地址:

https://blog.csdn.net/peerless_hero/article/details/54604735

起因

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

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

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

推测

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

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

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

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

return new Date(sqlTime.getTime());// java.sql.Time sqlTime
  • 1


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值