你知道目前最流行的Mybatis框架嗎?如何搭建呢喊崖?

MyBatis 本是apache的一個(gè)開(kāi)源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache software foundation 遷移到了google code,并且改名為MyBatis 雇逞。2013年11月遷移到Github荤懂。

iBATIS一詞來(lái)源于“internet”和“abatis”的組合,是一個(gè)基于Java的持久層框架塘砸。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO)

MyBatis是一個(gè)支持普通SQL查詢节仿,存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及對(duì)結(jié)果集的檢索封裝掉蔬。MyBatis可以使用簡(jiǎn)單的XML或注解用于配置和原始映射廊宪,將接口和Java的POJO(Plain Old Java Objects,普通的Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄女轿。

mybatis不是一個(gè)完全的orm框架箭启,Mybatis需要程序員自己寫sql,但是也存在映射(輸入?yún)?shù)映射蛉迹,輸出結(jié)果映射)傅寡,學(xué)習(xí)門檻mybatis比hibernate低;同時(shí)靈活性高婿禽,特別適用于業(yè)務(wù)模型易變的項(xiàng)目赏僧,使用范圍廣大猛。

簡(jiǎn)單概括:**更加簡(jiǎn)化jdbc代碼扭倾,簡(jiǎn)化持久層,sql語(yǔ)句從代碼中分離挽绩,利用反射膛壹,將表中數(shù)據(jù)與java bean 屬性一一映射即ORM(Object Relational Mapping 對(duì)象關(guān)系映射) **

使用范圍:

在日常的開(kāi)發(fā)項(xiàng)目中,如中小型項(xiàng)目,例如ERP(Crm客戶關(guān)系管理系統(tǒng)模聋,OA系統(tǒng)),需求與關(guān)系模型相對(duì)固定建議使用Hibernate肩民,對(duì)于需求不固定的項(xiàng)目,比如:互聯(lián)網(wǎng)項(xiàng)目链方,建議使用mybatis持痰,因?yàn)?strong>需要經(jīng)常靈活去編寫sql語(yǔ)句∷钍矗總之工窍,mybatis成為當(dāng)下必須學(xué)習(xí)掌握的一個(gè)持久層框架。

Mybatis框架搭建的方式

  • 新建Maven項(xiàng)目
  • log4j 日志添加
  • resources目錄下配置文件添加
  • 映射文件添加
  • 實(shí)體類Customer添加
  • 在父類工程pom獲取資源
  • 測(cè)試

案例實(shí)操

1.新建Maven項(xiàng)目

**新建maven項(xiàng)目 ,pom文件添加依賴jar **

<!-- mybatis jar 包依賴 -->
<dependency>   
    <groupId>org.mybatis</groupId> 
    <artifactId>mybatis</artifactId>   
    <version>3.4.1</version>
</dependency>
<!-- 數(shù)據(jù)庫(kù)驅(qū)動(dòng) -->
<dependency>   
    <groupId>mysql</groupId> 
    <artifactId>mysql-connector-java</artifactId> 
    <version>5.1.39</version>
</dependency>
<!-- log4j日志打印 -->
<dependency>    
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>  
    <version>1.2.16</version>
</dependency>

2.log4j 日志添加

在src/main/resources 資源包下添加log4j日志輸出properties文件前酿,便于查看日志輸出信息

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
#Consoleoutput...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

3.resources目錄下配置文件添加

新建mybatis.xml文件患雏,并加入配置信息如下(數(shù)據(jù)庫(kù)名mybatis,表 user)

<?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">
<!-- 添加數(shù)據(jù)庫(kù)連接相關(guān)配置信息 -->
<configuration>
    <environments default="development">
        <environment id="development">
            <!-- 加入事務(wù)控制 -->
            <transactionManager type="jdbc" />
            <!-- 配置數(shù)據(jù)庫(kù)連接信息 -->
            <dataSource type="pooled">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/spring-test" />
                <property name="username" value="root" />
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>
    <!-- mapper 配置文件指定 文件數(shù)量可配置多個(gè)-->
    <mappers>
        <mapper resource="com/xxx/mapper/CustomerMapper.xml" />
    </mappers>
</configuration>

對(duì)于標(biāo)簽的配置可能不會(huì)出現(xiàn)自動(dòng)提示:

解決辦法:引入mybatis-3-config.dtd 文件

Window-preferences-搜索xml-xml catalog

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-PjkueQDe-1599817235392)(https://imgkr.cn-bj.ufileos.com/5ae242b8-c51d-41e3-a3ac-7b6b1897a245.png)]

在User Specified Entries目錄下 add->

Locattion:http://mybatis.org/dtd/mybatis-3-mapper.dtd (值與xml模板中對(duì)應(yīng))
Key Type:URI
Key:-//mybatis.org//DTD Mapper 3.0//EN (值與xml模板中對(duì)應(yīng))
第二步:
關(guān)閉xml,重新打開(kāi)罢维,如果重新打開(kāi)不可以淹仑,重啟Eclipse即可。

最后點(diǎn)擊確定即可

4.映射文件添加

新建CustomerMapper.xml配置文件

<?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">
<!-- 
  1.命名空間配置  全局唯一  包名+文件名
  2.配置Mapped Statement 
  3. statement配置 
       id 值聲明statement編號(hào)  同一命名空間(同一文件)下不可重復(fù)
       parameterType  輸入?yún)?shù)即占位符的數(shù)據(jù)類型  類型可以是 基本數(shù)據(jù)類型,字符串,java bean ,map,list等
       resultType     輸出結(jié)果  類型可以是基本數(shù)據(jù)類型,字符串,java bean,map等
       statement 描述 即待執(zhí)行的sql  
       #{id}  占位符  變量名為id/value 均可   ${value}  變量名必須為value 字符串拼接形式  無(wú)法避免sql 注入    
 -->
<mapper namespace="com.xxx.mapper.customerMapper">
    <!-- 查詢客戶-->
    <select id="queryCustomerById" parameterType="int" resultType="com.xxx.pojo.Customer">
      SELECT id,user_name 'userName',user_balance 'userBalance' FROM  yg_customer WHERE  id=#{id}
    </select>
</mapper>

5.實(shí)體類Customer添加

package com.xxx.pojo;

public class Customer {
    private  int id;
    private  String userName;
    private  String userBalance;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserBalance() {
        return userBalance;
    }

    public void setUserBalance(String userBalance) {
        this.userBalance = userBalance;
    }

    @Override
    public String toString() {
        return "Customer{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", userBalance='" + userBalance + '\'' +
                '}';
    }
}

6.在父類工程pom獲取資源

<build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>
    </build>

7.測(cè)試

@Test
public void test() throws IOException {   
    /**       
    a)肺孵、讀取mybatis的配置文件    
    b)匀借、加載配置文件創(chuàng)建SqlSessionFactory     
    c)、根據(jù)SqlSessionFactory創(chuàng)建SqlSession   
    d)平窘、通過(guò)sqlSession操作數(shù)據(jù)庫(kù)      
    e)怀吻、處理結(jié)果    
    f)、關(guān)閉session   
    */       
    /**    
    * 加載配置到內(nèi)存 
    */   
    InputStream is= Resources.getResourceAsStream("mybatis.xml");    
    /**  
    *  創(chuàng)建SqlSessionFactory 對(duì)象  hibernate 也是如此 必須先獲取SqlSessionFactory 實(shí)例化對(duì)象        */    
    SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);    
    /**     
    *  獲取session以便操作數(shù)據(jù)庫(kù)  
    *  參數(shù)一:指定UserMapper.xml 映射文件id  必須加入命名空間     
    *  參數(shù)二: 指定輸入?yún)?shù)    
    */    
    SqlSession session=factory.openSession();   
    Customer customer = session.selectOne("com.xxx.mapper.customerMapper.queryCustomerById", 2);
    /**    
    * 將返回的結(jié)果輸出    
    */   
       System.out.println(customer); 
    /**   
    * 操作完數(shù)據(jù)庫(kù) 關(guān)閉session    
    */  
    session.close();
} 

PS:獲取學(xué)習(xí)資源技術(shù)干貨:lezijie006(暗號(hào)13)

擴(kuò)展

說(shuō)明:

1 Configuration-mybatis配置

1)初婆、與spring 一樣,可以通過(guò)配置文件或注解的形式進(jìn)行配置;

2)蓬坡、mybatis.xml,此文件作為mybatis的全局配置文件磅叛,配置了mybatis的運(yùn)行環(huán)境等信息;

3)屑咳、mapper文件即sql映射文件,文件中配置了操作數(shù)據(jù)庫(kù)的sql語(yǔ)句弊琴。此文件需要在mybatis.xml中加載兆龙。

4)、有了配置文件后敲董,通過(guò)mybatis環(huán)境等配置信息構(gòu)造SqlSessionFactory即會(huì)話工廠

5)紫皇、由會(huì)話工廠創(chuàng)建sqlSession即會(huì)話,操作數(shù)據(jù)庫(kù)需要通過(guò)sqlSession進(jìn)行

6)腋寨、sqlSession使用Executor(數(shù)據(jù)庫(kù)操作執(zhí)行器接口)操作數(shù)據(jù)庫(kù)聪铺,同Executor 具體實(shí)現(xiàn)類實(shí)現(xiàn)指定dao 層數(shù)據(jù)訪問(wèn)操作。

2 Mapped Statement

框架底層封裝對(duì)象(sql語(yǔ)句萄窜、輸入?yún)?shù)铃剔、輸出結(jié)果類型)撒桨,它包裝了mybatis配置信息及sql映射信息等,mapper文件(即Mapper.xml)中一個(gè)sql對(duì)應(yīng)一個(gè)Mapped Statement對(duì)象键兜,sql的id即是Mapped statement的id凤类。

3 Sql的輸入映射參數(shù)

基本和簡(jiǎn)單類型、HashMap普气、自定義POJO等谜疤。輸入?yún)?shù)映射就是jdbc編程中對(duì)preparedStatement設(shè)置參數(shù),Executor通過(guò)Mapped Statement在執(zhí)行sql前將輸入的java對(duì)象映射至sql中现诀。

4 Sql的輸出映射參數(shù)

基本和簡(jiǎn)單類型茎截、HashMap、自定義POJO赶盔。 Statement對(duì)sql執(zhí)行輸出結(jié)果進(jìn)行定義企锌,輸出結(jié)果映射過(guò)程相當(dāng)于jdbc編程中對(duì)結(jié)果的解析處理過(guò)程,Executor通過(guò)Mapped Statement在執(zhí)行sql后將輸出結(jié)果映射至java對(duì)象中于未。

這里使用Maven 工程撕攒,對(duì)應(yīng)的mybatis jar包下載通過(guò)maven 倉(cāng)庫(kù)統(tǒng)一管理下載。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末烘浦,一起剝皮案震驚了整個(gè)濱河市抖坪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌闷叉,老刑警劉巖擦俐,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異握侧,居然都是意外死亡蚯瞧,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門品擎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)埋合,“玉大人,你說(shuō)我怎么就攤上這事萄传∩跛蹋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵秀菱,是天一觀的道長(zhǎng)振诬。 經(jīng)常有香客問(wèn)我,道長(zhǎng)衍菱,這世上最難降的妖魔是什么赶么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮梦碗,結(jié)果婚禮上禽绪,老公的妹妹穿的比我還像新娘。我一直安慰自己洪规,他們只是感情好印屁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著斩例,像睡著了一般雄人。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上念赶,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天础钠,我揣著相機(jī)與錄音,去河邊找鬼叉谜。 笑死旗吁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的停局。 我是一名探鬼主播很钓,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼董栽!你這毒婦竟也來(lái)了码倦?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤锭碳,失蹤者是張志新(化名)和其女友劉穎袁稽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體擒抛,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡推汽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了歧沪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片民泵。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖槽畔,靈堂內(nèi)的尸體忽然破棺而出栈妆,到底是詐尸還是另有隱情,我是刑警寧澤厢钧,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布鳞尔,位于F島的核電站,受9級(jí)特大地震影響早直,放射性物質(zhì)發(fā)生泄漏寥假。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一霞扬、第九天 我趴在偏房一處隱蔽的房頂上張望糕韧。 院中可真熱鬧枫振,春花似錦、人聲如沸萤彩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)雀扶。三九已至杖小,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間愚墓,已是汗流浹背予权。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浪册,地道東北人扫腺。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像村象,于是被迫代替她去往敵國(guó)和親斧账。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353