来源:https://www.jb51.net/program/287517rew.htmMyBatis处理MySQL字段类型date与datetime1) 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']
一、 MyBatis处理日期有两种的jdbcType:1、jdbcType=DATE2、jdbcType=TIMESTAMP
二、JAVA中只有一种日期类型 DateTimejava.util.Date实际上是能够表示mysql的三种字段类型:1、date2、datetime3、timestamp而实际将java.util.Date当做参数传递给Mapper的时候1、假如我们不指定jdbcType,那么这个日期会自动转化会MySQL的timestamp,例子如下:2、指定jdbcType=TIMESTAMP结果同上。3、指定jdbcType=DATE,那么MyBatis会将传入参数截取为2018-07-24(Date)四、总结使用java.util.Date作为参数传递给Mapper时,不管MySQL的日期字段类型是date、datetime或者timestamp中的哪一种,MyBatis都能够自动做出类型转换,可以直接使用 =、>、<、>=、<=符号来进行筛选。 唯一的不同点是指定jdbcType=DATE的时候,MyBatis会自动截取掉时间,如果MySQL的日期字段类型是datetime或者timestamp一定不要这么写。 总之不手动指定参数的jdbcType必然没有问题。
Mybatis中javaType和jdbcType对应关系JDBC Type / Java TypeCHAR StringVARCHAR StringLONGVARCHAR StringNUMERIC java.math.BigDecimalDECIMAL java.math.BigDecimalBIT booleanBOOLEAN booleanTINYINT byteSMALLINT shortINTEGER intBIGINT longREAL floatFLOAT doubleDOUBLE doubleBINARY byte[]VARBINARY byte[]LONGVARBINARY byte[]DATE java.sql.DateTIME java.sql.TimeTIMESTAMP java.sql.TimestampCLOB ClobBLOB BlobARRAY ArrayDISTINCT mapping of underlying typeSTRUCT StructREF RefDATALINK java.net.URL
oracle数据类型和对应的java类型用mybatis generator生成代码后,执行查询语句时,oracle里的Date类型字段只精确到年月日,后面时分秒都为零。 jdbcType=”DATE”时候,存入到数据库中的字段只有年月日! 后来发现是jdbcType问题,改成 jdbcType=“TIMESTAMP” 就可以。(原先默认生成时是jdbcType=“DATE”)