Java使用Mybatis插入Mysql数据库时间跟取出的时间不一致的解决办法

作者:青山常在人不老   阅读 (4799)  |  收藏 (2)  |  点赞 (0)

摘要

本文将会讲述当Java向Mysql插入的时间后,再从数据库中取出的时间不一致 的解决办法 。


原文链接:Java使用Mybatis插入Mysql数据库时间跟取出的时间不一致的解决办法

通过下面的步骤,就可以完全解决java插入mysql数据库时间以后再取出的的时间跟插入时的时间不一致,或者丢失了毫秒数的问题,或者插入数据库前的时间转为Long的值跟取出的时间转为的long值不一致的问题。。

1.类的属性类型

首先需要注意的是,Java中的实体类中的 这个时间属性的类型需要是Timestamp类型,例如:

	private Timestamp createTime; // 创建时间

除此之外的 java.util.Date 和java.sql.Date均不能达到本文的效果。

这是因为Date类型默认是不带有毫秒的,只有年月日和时分秒,因此,如果你发现插入的 数据库中的时间和再次取出来的时间毫秒数不一致,一般即时这种 问题。

2.数据库表的列类型

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

`createTime`  datetime NOT NULL;

3.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数据库时间以后再取出的的时间跟插入时的时间不一致,或者丢失了毫秒数的问题。

分类   默认分组
字数   959

博客标签    Mysql插入时间错误   java 插入mysql时间不一致  

评论