1) DATETIME
顯示格式:yyyy-MM-dd HH:mm:ss
時(shí)間范圍:[ '1000-01-01 00:00:00'到'9999-12-31 23:59:59']
2) DATE
顯示格式:yyyy-MM-dd
時(shí)間范圍:['1000-01-01'到'9999-12-31']
3) TIMESTAMP
顯示格式:yyyy-MM-dd HH:mm:ss
時(shí)間范圍:[ '1970-01-01 00:00:00'到'2037-12-31 23:59:59']
一、 MyBatis處理日期有兩種的jdbcType:
1、jdbcType=DATE
2鞋喇、jdbcType=TIMESTAMP
二垒探、當(dāng)我們使用java.util.Date作為實(shí)體的日期類(lèi)型時(shí)(JAVA沒(méi)有DateTime這個(gè)類(lèi),Date類(lèi)能夠同時(shí)表示日期和時(shí)間)空繁,java.util.Date實(shí)際上是能夠表示MySQL的三種字段類(lèi)型:
1殿衰、date
2、datetime
3盛泡、timestamp
三闷祥、MyBatis處理方式
而實(shí)際將java.util.Date當(dāng)做參數(shù)傳遞給Mapper的時(shí)候
1、假如我們不指定jdbcType傲诵,那么這個(gè)日期會(huì)自動(dòng)轉(zhuǎn)化會(huì)MySQL的timestamp凯砍,例子如下:
18:13:54.723 [main] DEBUG c.x.d.B.countFirstOverdueSmsReport - ==> Preparing: select count(*) from bill_flow where (pay_status = 'NOT_PAID' and bill_date = ? ) or (pay_status = 'PAID' and bill_date = ? and finish_time BETWEEN ? and ?)
18:13:54.797 [main] DEBUG c.x.d.B.countFirstOverdueSmsReport - ==> Parameters: 2018-07-24 00:00:00.0(Timestamp), 2018-07-24 00:00:00.0(Timestamp), 2018-07-25 00:00:00.0(Timestamp), 2018-07-25 23:59:59.0(Timestamp)
18:13:54.917 [main] DEBUG c.x.d.B.countFirstOverdueSmsReport - <== Total: 1
2、指定jdbcType=TIMESTAMP結(jié)果同上拴竹。
3悟衩、指定jdbcType=DATE,那么MyBatis會(huì)將傳入?yún)?shù)截取為2018-07-24(Date)
四栓拜、總結(jié)
使用java.util.Date作為參數(shù)傳遞給Mapper時(shí)座泳,不管MySQL的日期字段類(lèi)型是date惠昔、datetime或者timestamp中的哪一種,MyBatis都能夠自動(dòng)做出類(lèi)型轉(zhuǎn)換钳榨,可以直接使用 =舰罚、>、<薛耻、>=营罢、<=符號(hào)來(lái)進(jìn)行篩選。
唯一的不同點(diǎn)是指定jdbcType=DATE的時(shí)候饼齿,MyBatis會(huì)自動(dòng)截取掉時(shí)間饲漾,如果MySQL的日期字段類(lèi)型是datetime或者timestamp一定不要這么寫(xiě)。