1、MyBatis中jdbcType简介

MyBatis处理日期有两种的jdbcType,如下所示:

(1)jdbcType=DATE
(2)jdbcType=TIMESTAMP

注意:此时的DATE指的是java.sql.Date,不是java.util.Date,要注意两者的区别。java.util.Date通常情况下用它获取当前时间,java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分。

2、MySQL数据库常用日期类型

(1)DATETIME

显示格式:YYYY-MM-DD HH:MM:SS
时间范围:[ '1000-01-01 00:00:00'到'9999-12-31 23:59:59']

(2)DATE

显示格式:YYYY-MM-DD
时间范围:['1000-01-01'到'9999-12-31']

(3)TIMESTAMP

显示格式:YYYY-MM-DD HH:MM:SS
时间范围:[ '1970-01-01 00:00:00'到'2037-12-31 23:59:59']

3、Java编程中的时间用法:

Java中有两个Date类,一个是java.util.Date,通常情况下用它获取当前时间,另一个是java.sql.Date,是针对SQL语句使用的,它只包含日期而没有时间部分。

备注:我们常用的是java.util.Date,不必考虑java.sql.Date的情况,只要明白它仅仅用于mybatis框架的jdbcType=DATE即可。

4、不要画蛇添足

使用java.util.Date作为参数传递给Mapper时,不管MySQL的日期字段类型是date、datetime或者timestamp中的哪一种,默认缺省情况下,MyBatis都能够自动做出类型转换,可以直接使用 =、>、<、>=、<=符号来进行筛选。

但是,当我们手动指定jdbcType=DATE的时候,MyBatis会自动截取掉时间,只保留日期。如果MySQL的日期字段类型是datetime或者timestamp一定不要这么写,否则属于画蛇添足,自讨没趣。

总之,在连接mysql数据库的时候,当jdbcType="DATE"类型时,返回的时间只有年月日(yyyy-MM-dd)的,当jdbcType="TIMESTAMP"的时候,返回的时间是年月日和时分秒(yyyy-MM-dd HH:mm:ss)。

从网上找了一个例子,请参考一下,以绑定时间和解绑时间为例:

(1)当绑定时间的jdbcType="DATE",解绑时间的为jdbcType="TIMESTAMP",xml文件设置如下:

jdbctype1.png

(2)最终查询到的数据类型是DATE的数据只有年月日(yyyy-MM-dd),而TIMESTAMP的年月日和时分秒都有(yyyy-MM-dd HH:mm:ss),如下所示:

jdbctype2.png

(3)当两个时间都设为TIMESTAMP的时候,xml文件设置如下:

jdbctype3.png

(4)两个时间数据都展示位年月日和时分秒(yyyy-MM-dd HH:mm:ss),结果如下:

jdbctype4.png

标签: none

添加新评论