通过下面的步骤,就可以完全解决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 into
document_info(docTitle,docAbstract,createTime)
values(#{docTitle},#{docAbstract},#{createTime,jdbcType=TIMESTAMP})
这里的createTime必须写成#{createTime,jdbcType=TIMESTAMP}形式,这是由于如果不写名传入的createTime类型,它默认为Date类型,会丢掉毫秒数。
通过以上步骤,就可以完全解决java插入mysql数据库时间以后再取出的的时间跟插入时的时间不一致,或者丢失了毫秒数的问题。