Mybatis中使用JDK8的日期API

序言

??本次所學(xué)習(xí)使用的Mysql版本:5.7.20,Mybatis版本3.4.0危喉,JDBC版本5.1.30驼唱。

概述

??在使用Mybatis這種半自動(dòng)化的框架中,我們都知道铐尚,實(shí)體Entity的屬性與數(shù)據(jù)庫中表的字段存在著一種映射關(guān)系,我們以MySql舉例闷尿,比如表中varchar與java中String的映射塑径,date與java.sql.Date,time與java.sql.Time填具,datetime與java.util.Date等之間的這種映射關(guān)系。而在JDK8中匆骗,目前是沒有直接提供與LocalDate這種相關(guān)聯(lián)的映射的劳景。如果直接使用,會(huì)提示類似錯(cuò)誤:

 No typehandler found for property create

不過碉就,Mybatis也提供了一個(gè)間接的方式來實(shí)現(xiàn)這種轉(zhuǎn)換盟广。
也就是說,我們直接在pom.xml中添加以下依賴就可以完成相應(yīng)的轉(zhuǎn)換:

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-typehandlers-jsr310</artifactId>
  <version>1.0.2</version>
</dependency>

實(shí)例

再多說一點(diǎn)瓮钥,Mysql中與日期時(shí)間相關(guān)的類型有如下5種:time, date, datetime, timestamp, year筋量,所以我們基于這幾種類型進(jìn)行如下兩個(gè)簡單的例子:

  1. 新建表結(jié)構(gòu):


    表結(jié)構(gòu).png

    數(shù)據(jù).png
  2. 對(duì)應(yīng)的實(shí)體:Student(JDK8之前),Student2(JDK8之后)碉熄,注意其中的參數(shù)類型桨武;

import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;

/**
 * Student實(shí)體
 *
 * @author zhangwugui
 * @since 2018/1/24 17:22
 */
public class Student {
    private Integer id;
    private String name;
    private Integer age;
    private Date create;
    private java.util.Date update;
    private Time modify;
    private Timestamp stamp;
    private Integer year;
    
    // get, set方法省略

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", create=" + create +
                ", update=" + update +
                ", modify=" + modify +
                ", stamp=" + stamp +
                ", year=" + year +
                '}';
    }
}
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

/**
 * Student實(shí)體
 *
 * @author zhangwugui
 * @since 2018/1/24 17:22
 */
public class Student2 {
    private Integer id;
    private String name;
    private Integer age;
    private LocalDate create;
    private LocalDateTime update;
    private LocalTime modify;
    private LocalDateTime stamp;
    private Integer year;
    
    // get,set方法省略
    
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", create=" + create +
                ", update=" + update +
                ", modify=" + modify +
                ", stamp=" + stamp +
                ", year=" + year +
                '}';
    }
}
  1. 其他的Mapper配置相關(guān)的就不多說了,因?yàn)檫@不是本文的重點(diǎn)锈津。如果需要呀酸,可以參考我另一篇文章,鏈接:Mybatis環(huán)境配置琼梆。
    pom.xml添加JSR-310支持即可:
 <dependencies>
        <!-- mybatis 配置 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <!-- mysql驅(qū)動(dòng) -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.30</version>
        </dependency>

        <!-- JSR 310支持 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-typehandlers-jsr310</artifactId>
            <version>1.0.1</version>
        </dependency>
    </dependencies>
  1. 執(zhí)行:
String statement = "com.mapper.IStudentMapper.getAll";
List<Student> student = sessionManager.selectList(statement);
System.out.println(student);

String statement2 = "com.mapper.IStudent2Mapper.getAll";
List<Student2> student2 = sessionManager.selectList(statement2);
System.out.println(student2);
  1. 打印結(jié)果:
[Student{id=1, name='test', age=13, create=2018-01-31, update=Wed Jan 31 15:20:15 CST 2018, 
modify=15:20:22, stamp=2018-01-31 07:20:31.0, year=2018}]

[Student{id=1, name='test', age=13, create=2018-01-31, update=2018-01-31T15:20:15, 
modify=15:20:22, stamp=2018-01-31T07:20:31, year=2018}]

可以看到性誉,已經(jīng)實(shí)現(xiàn)了數(shù)據(jù)映射的功能窿吩。

不過有一些問題需要注意:

  1. Mybatis版本必須是3.4.0或之后版本,如果是之前的版本错览,還需要在mybatis-config.xml中配置:
<typeHandlers>
  <!-- ... -->
  <typeHandler handler="org.apache.ibatis.type.InstantTypeHandler" />
  <typeHandler handler="org.apache.ibatis.type.LocalDateTimeTypeHandler" />
  <typeHandler handler="org.apache.ibatis.type.LocalDateTypeHandler" />
  <typeHandler handler="org.apache.ibatis.type.LocalTimeTypeHandler" />
  <typeHandler handler="org.apache.ibatis.type.OffsetDateTimeTypeHandler" />
  <typeHandler handler="org.apache.ibatis.type.OffsetTimeTypeHandler" />
  <typeHandler handler="org.apache.ibatis.type.ZonedDateTimeTypeHandler" />
  <typeHandler handler="org.apache.ibatis.type.YearTypeHandler" />
  <typeHandler handler="org.apache.ibatis.type.MonthTypeHandler" />
  <typeHandler handler="org.apache.ibatis.type.YearMonthTypeHandler" />
  <typeHandler handler="org.apache.ibatis.type.JapaneseDateTypeHandler" />
</typeHandlers>
  1. NOTE :Since version 3.4.5, The MyBatis has been supported JSR-310(Date and Time API) by default纫雁。
    也就是說在Mybatis3.4.5之后,官方已經(jīng)默認(rèn)支持了JSR-310倾哺,所以我們也不用添加額外配置了轧邪。
  1. (1) mybatis-typehandlers-jsr310 GitHub地址:
    https://github.com/mybatis/typehandlers-jsr310
    (2) mybatis的typeHandlers類型轉(zhuǎn)換器配置說明:
    http://www.mybatis.org/mybatis-3/zh/configuration.html#typeHandlers
    (3) JDK1.8API說明:
    https://docs.oracle.com/javase/8/docs/api/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市悼粮,隨后出現(xiàn)的幾起案子闲勺,更是在濱河造成了極大的恐慌,老刑警劉巖扣猫,帶你破解...
    沈念sama閱讀 223,002評(píng)論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菜循,死亡現(xiàn)場離奇詭異,居然都是意外死亡申尤,警方通過查閱死者的電腦和手機(jī)癌幕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昧穿,“玉大人勺远,你說我怎么就攤上這事∈蓖遥” “怎么了胶逢?”我有些...
    開封第一講書人閱讀 169,787評(píng)論 0 365
  • 文/不壞的土叔 我叫張陵,是天一觀的道長饰潜。 經(jīng)常有香客問我初坠,道長,這世上最難降的妖魔是什么彭雾? 我笑而不...
    開封第一講書人閱讀 60,237評(píng)論 1 300
  • 正文 為了忘掉前任碟刺,我火速辦了婚禮,結(jié)果婚禮上薯酝,老公的妹妹穿的比我還像新娘半沽。我一直安慰自己,他們只是感情好吴菠,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評(píng)論 6 398
  • 文/花漫 我一把揭開白布者填。 她就那樣靜靜地躺著,像睡著了一般橄务。 火紅的嫁衣襯著肌膚如雪幔托。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,821評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音重挑,去河邊找鬼嗓化。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谬哀,可吹牛的內(nèi)容都是我干的刺覆。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼史煎,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼谦屑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起篇梭,我...
    開封第一講書人閱讀 40,196評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤氢橙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后恬偷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悍手,經(jīng)...
    沈念sama閱讀 46,716評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評(píng)論 3 343
  • 正文 我和宋清朗相戀三年袍患,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坦康。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,928評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诡延,死狀恐怖滞欠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肆良,我是刑警寧澤筛璧,帶...
    沈念sama閱讀 36,583評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站惹恃,受9級(jí)特大地震影響隧哮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜座舍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望陨帆。 院中可真熱鬧曲秉,春花似錦、人聲如沸疲牵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纲爸。三九已至亥鸠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背负蚊。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評(píng)論 1 274
  • 我被黑心中介騙來泰國打工神妹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人家妆。 一個(gè)月前我還...
    沈念sama閱讀 49,378評(píng)論 3 379
  • 正文 我出身青樓鸵荠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親伤极。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蛹找,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容