一缤灵、mybatis 入門(mén)

MyBatis 本是apache的一個(gè)開(kāi)源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache software foundation 遷移到了google code勉耀,并且改名為MyBatis 瘫想。2013年11月遷移到Github。是一個(gè)基于Java的持久層框架靡菇。Mybatis 提供的持久層框架包括SQL Maps和Data Access Objects(DAOs)

1.第一個(gè) mybatis 小程序

  • 創(chuàng)建一個(gè) maven 工程


  • 配置 pom 文件 重归,導(dǎo)包
<dependencies>
        <!-- 配置 mybatis 核心依賴(lài) -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>
        <!-- 導(dǎo)入log4j 日志包 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.21</version>
        </dependency>
    </dependencies>
  • 配置全局配置文件 SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                 <property name="driver" value="com.mysql.jdbc.Driver"/>
                 <property name="url" value="jdbc:mysql:///xingxue24"/>
                 <property name="username" value="root"/>
                 <property name="password" value="root"/>
            </dataSource>
            
        </environment>
    </environments>  
    <mappers>
        <mapper resource="com/xingxue/mybatis/mapper/UserMapper.xml"/>
    </mappers>
</configuration>
  • 配置 mapper 映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
    <!-- insert 標(biāo)簽會(huì)被mybatis封裝成一個(gè) statement對(duì)象 -->
    <insert id="add">
        INSERT INTO TBL_USER (NAME,BIRTH,PASSWORD)VALUES(#{name},#{birth},#{password})
    </insert>
</mapper>
  • 測(cè)試
private static void insert() throws IOException {
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactoryBuilder sb = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = sb.build(is);
        //得到了 SqlSession
        SqlSession session  = factory.openSession();
        UserModel u = new UserModel();
        u.setBirth(new Date());
        u.setPassword("111");
        u.setName("test2");
        //插入操作
        session.insert("test.add",u);
        //提交事務(wù)
        session.commit();
        
    }

2.Mybatis框架原理

  • 框架圖:


  • 流程說(shuō)明:

1.mybatis配置文件,包括Mybatis全局配置文件和Mybatis映射文件厦凤,其中全局配置文件配置了數(shù)據(jù)源鼻吮、事務(wù)等信息;映射文件配置了SQL執(zhí)行相關(guān)的 信息较鼓。
2.mybatis通過(guò)讀取配置文件信息(全局配置文件和映射文件)椎木,構(gòu)造出SqlSessionFactory违柏,即會(huì)話工廠。
3.通過(guò)SqlSessionFactory香椎,可以創(chuàng)建SqlSession即會(huì)話漱竖。Mybatis是通過(guò)SqlSession來(lái)操作數(shù)據(jù)庫(kù)的。
4.SqlSession本身不能直接操作數(shù)據(jù)庫(kù)畜伐,它是通過(guò)底層的Executor執(zhí)行器接口來(lái)操作數(shù)據(jù)庫(kù)的馍惹。Executor接口有兩個(gè)實(shí)現(xiàn)類(lèi)动遭,一個(gè)是普通執(zhí)行器息楔,一個(gè)是緩存執(zhí)行器(默認(rèn))。
5.Executor執(zhí)行器要處理的SQL信息是封裝到一個(gè)底層對(duì)象MappedStatement中银酗。該對(duì)象包括:SQL語(yǔ)句慎框、輸入?yún)?shù)映射信息良狈、輸出結(jié)果集映射信息。其中輸入?yún)?shù)和輸出結(jié)果的映射類(lèi)型包括java的簡(jiǎn)單類(lèi)型笨枯、HashMap集合對(duì)象薪丁、POJO對(duì)象類(lèi)型。

3.Mybtais 的核心對(duì)象API

  • Resources 對(duì)象 :通過(guò) 類(lèi)加載器獲取文件數(shù)據(jù)
  • SqlSessionFactoryBuilder 對(duì)象: 創(chuàng)建 SqlSessionFactory 對(duì)象實(shí)例
  • SqlSessionFactory 對(duì)象: 創(chuàng)建一個(gè) Connection 或者說(shuō) SqlSession 對(duì)象
  • SqlSession 對(duì)象:執(zhí)行 sql 命令 以及管理事務(wù) (掌握)馅精,該對(duì)象線程不安全

4.Mybatis全局配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="dev">
        <!-- environment 該標(biāo)簽用于配置數(shù)據(jù)庫(kù)環(huán)境 -->
        <environment id="dev">
            <!--  transactionManager 配置事務(wù)管理器  -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- dataSource 配置數(shù)據(jù)庫(kù)連接信息 -->
            <dataSource type="POOLED">
                 <property name="driver" value="com.mysql.jdbc.Driver"/>
                 <property name="url" value="jdbc:mysql:///xingxue24"/>
                 <property name="username" value="root"/>
                 <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>  
    <!-- mappers 用于 引用 mapper 映射文件 -->
    <mappers>
        <mapper resource="com/xingxue/mybatis/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

5.Mybatis映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mapper 根標(biāo)簽: namespace 屬性:該屬性的值可以隨便定義窥突,但是取點(diǎn)有意義的,如果要使用mybatis 官方推薦的 動(dòng)態(tài)mapper,該值就不能隨便定義 -->
<mapper namespace="test">
    <!-- insert 標(biāo)簽會(huì)被mybatis封裝成一個(gè) statment對(duì)象硫嘶。
           id 屬性 :statment 對(duì)象 取個(gè)別名
           
     -->
    <insert id="add">
        INSERT INTO TBL_USER (NAME,BIRTH,PASSWORD)VALUES(#{name},#{birth},#{password})
    </insert>
    
    <delete id="deleteById">
        DELETE FROM TBL_USER WHERE ID = #{ID}
    </delete>
    
    <update id="update">
        UPDATE TBL_USER SET NAME = #{name},PASSWORD=#{password},BIRTH=#{birth} WHERE ID = #{id}
    </update>
    
    <!-- 
        resultType 屬性,該屬性只有 select 標(biāo)簽才有梧税,指定查詢(xún)結(jié)果(行)用具體的類(lèi)型來(lái)封裝
     -->
    <select id="queryById" resultType="com.xingxue.mybatis.model.UserModel">
        SELECT ID,NAME,PASSWORD,BIRTH FROM TBL_USER WHERE ID = #{id}
    </select>
    
    <select id="queryList" resultType="com.xingxue.mybatis.model.UserModel">
        SELECT ID,NAME,PASSWORD,BIRTH FROM TBL_USER 
    </select>
    
</mapper>

6.官方推薦使用動(dòng)態(tài)mapper代理技術(shù)

只寫(xiě)接口沦疾,不寫(xiě)實(shí)現(xiàn)

注意:我們使用myabtis自動(dòng)創(chuàng)建mapper代理對(duì)象的方式,不需要開(kāi)發(fā)Mapper接口實(shí)現(xiàn)類(lèi)第队,要滿(mǎn)足以下規(guī)范:

  • Mapper.xml映射文件中的namesapce的值要跟mapper接口全路徑一致
  • Mapper.xml 映射文件中的 crud標(biāo)簽中的id 要跟Mapper接口定義的方法名一致
  • Mapper.xml 映射文件的位置要跟Mapper接口的位置一致 同包下
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哮塞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凳谦,更是在濱河造成了極大的恐慌忆畅,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尸执,死亡現(xiàn)場(chǎng)離奇詭異家凯,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)如失,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)绊诲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人褪贵,你說(shuō)我怎么就攤上這事掂之】苟恚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵世舰,是天一觀的道長(zhǎng)动雹。 經(jīng)常有香客問(wèn)我,道長(zhǎng)跟压,這世上最難降的妖魔是什么胰蝠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮裆馒,結(jié)果婚禮上姊氓,老公的妹妹穿的比我還像新娘。我一直安慰自己喷好,他們只是感情好翔横,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著梗搅,像睡著了一般禾唁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上无切,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天荡短,我揣著相機(jī)與錄音,去河邊找鬼哆键。 笑死掘托,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的籍嘹。 我是一名探鬼主播闪盔,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辱士!你這毒婦竟也來(lái)了泪掀?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤颂碘,失蹤者是張志新(化名)和其女友劉穎异赫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體头岔,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡塔拳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了峡竣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝙斜。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖澎胡,靈堂內(nèi)的尸體忽然破棺而出孕荠,到底是詐尸還是另有隱情娩鹉,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布稚伍,位于F島的核電站弯予,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏个曙。R本人自食惡果不足惜锈嫩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望垦搬。 院中可真熱鬧呼寸,春花似錦、人聲如沸猴贰。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)米绕。三九已至瑟捣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間栅干,已是汗流浹背迈套。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碱鳞,地道東北人桑李。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像窿给,于是被迫代替她去往敵國(guó)和親贵白。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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

  • 1. 簡(jiǎn)介 1.1 什么是 MyBatis 填大? MyBatis 是支持定制化 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射的優(yōu)秀的...
    笨鳥(niǎo)慢飛閱讀 5,429評(píng)論 0 4
  • 【深入淺出MyBatis系列一】MyBatis入門(mén) 陶邦仁](https://my.oschina.net/xia...
    天天嗦螺螄粉閱讀 750評(píng)論 0 5
  • mybatis中的sqlSession是線程安全的嗎俏橘? 鏈接:https://blog.csdn.net/qq_3...
    劉小刀tina閱讀 2,055評(píng)論 0 3
  • Mybatis簡(jiǎn)介 MyBatis 是一個(gè)可以自定義SQL允华、存儲(chǔ)過(guò)程和高級(jí)映射的持久層框架。MyBatis 摒除了...
    cuzz_閱讀 963評(píng)論 1 2
  • 1. Mybatis的介紹 MyBatis 本是apache的一個(gè)開(kāi)源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由ap...
    itzhouq的筆記閱讀 653評(píng)論 0 5