Mybatis的方便之處在于能夠把java對象與數(shù)據(jù)庫字段進(jìn)行自動映射和賦值惠窄。但是有種情況是需要我們手工處理的。
比如java對象的一個字段是java.util.Date類型漾橙,但數(shù)據(jù)庫是長整形(以mysqlinteger為例)杆融,mybatis在做自動轉(zhuǎn)換的時候就會出現(xiàn)類型不匹配的錯誤,需要我們手工進(jìn)行轉(zhuǎn)換近刘。今天小博老師就介紹一下如何進(jìn)行java對象與數(shù)據(jù)庫字段類型的自定義轉(zhuǎn)換擒贸。
mybatis提供了對自定義的類型轉(zhuǎn)換器(typeHandler)的支持,可以通過實現(xiàn)org.apache.ibatis.type.TypeHandler接口觉渴,也可以繼承org.apache.ibatis.type.BaseTypeHandler類介劫。今天就以繼承BaseTypeHandler為例說明自定義轉(zhuǎn)換器的實現(xiàn)方法。
第一個方法實現(xiàn)從java對象到數(shù)據(jù)庫字段的轉(zhuǎn)換案淋,通過parameter.getTime()函數(shù)把Date對象轉(zhuǎn)換成了Long類型座韵。其他三個方法實現(xiàn)從數(shù)據(jù)庫讀取到的字符串向Date對象的轉(zhuǎn)換。
完成TypeHandler后踢京,還需要在mapper中引用誉碴。比如:在一個User類中,有一個屬性updateDate是Date類型瓣距,在進(jìn)行更新操作時黔帕,需要做如下定義:
updateDate=#{updateDate, typeHandler=com.bwf.tools.DateConverter}這句話明確了該類型應(yīng)該是用的類型轉(zhuǎn)換器。這樣蹈丸,我們在程序中進(jìn)行日期更新時成黄,Mybatis就會自動把User對象的updateDate日期類型屬性轉(zhuǎn)換成數(shù)據(jù)庫字段的長整形。