解决Mybatis插入Mysql数据库时间跟取出的时间不一致

大超

在做Java项目中,会碰到向Mysql插入的时间后,再从数据库中取出的时间不一致的问题 。有时候是丢失了毫秒数的问题,有时候是插入数据库前的时间转为Long的值跟取出的时间转为的long值不一致的问题。下面我们一起来解决java插入mysql数据库时间以后再取出的的时间跟插入时的时间不一致。

类的属性类型

Java中的实体类中的时间属性的类型需要是Timestamp类型,例如:

private Timestamp createTime; // 创建时间

除此之外的 java.util.Date 和java.sql.Date均不能达到本文的效果。这是因为Date类型默认是不带有毫秒的,只有年月日和时分秒,因此,如果你发现插入的数据库中的时间和再次取出来的时间毫秒数不一致,一般就是这种问题。

数据库表的字段类型

Mysql数据库中时间类型有很多种,比如:date、time、timestamp、year、datetime这几种类型,那么真正能跟类中的时间Timestamp对应的列的类型只有timestamp,因此,我们需要在设计数据库时,把该字段的类型设置为timestamp.例如:

`createTime`  datetime NOT NULL;

mybatis实体类配置文件中SQL设置

这里是关键的一步,Mybatis中所有的SQL都是在mapping.xml文件中进行的,因此我们还需要修改SQL里的对应的时间的语法,要在插入的时间属性后面添加上在Java实体类中对应的属性类型timestamp。例如:

<insert id="addDocument">
insert into
document_info(docTitle,docAbstract,createTime)
values(#{docTitle},#{docAbstract},#{createTime,jdbcType=TIMESTAMP})
</insert>

这里的createTime必须写成#{createTime,jdbcType=TIMESTAMP}形式,这是由于如果不写明传入的createTime类型,它默认为Date类型,这样就会丢掉毫秒数。

通过上面的几个方面,就可以完全解决java插入mysql数据库时间以后再取出的时间跟插入的时间不一致,或者丢失了毫秒数的问题。

有问题可在下方评论留言,或关注“大超小志”微信公众号留言。

标签: Java Mybatis MySQL

留言评论

如需留言或评论,请在微信中打开此页面。