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

# 你知道目前最流行的Mybatis框架嗎甸鸟?如何搭建呢惦费?

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-RC1PxHvV-1602464466559)(https://imgkr.cn-bj.ufileos.com/768074eb-5e03-4ad1-81ee-5432b6614e4a.jpg)]

MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,并且改名為MyBatis 抢韭。2013年11月遷移到Github薪贫。

iBATIS一詞來源于“internet”和“abatis”的組合,是一個**基于Java的持久層框架**刻恭。iBATIS提供的持久層框架包括**SQL Maps和Data Access Objects(DAO)**

MyBatis是一個支持**普通SQL查詢瞧省,存儲過程和高級映射**的優(yōu)秀持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及對結(jié)果集的檢索封裝鳍贾。MyBatis可以使用**簡單的XML或注解用于配置和原始映射臀突,將接口和Java的POJO(Plain Old Java Objects,普通的Java對象)映射成數(shù)據(jù)庫中的記錄**贾漏。

mybatis不是一個完全的orm框架,Mybatis需要程序員自己寫sql藕筋,但是也存在映射(輸入?yún)?shù)映射纵散,輸出結(jié)果映射),**學(xué)習(xí)門檻mybatis比hibernate低隐圾;同時靈活性高伍掀,特別適用于業(yè)務(wù)模型易變的項目,使用范圍廣**暇藏。

簡單概括:**更加簡化jdbc代碼蜜笤,簡化持久層,sql語句從代碼中分離盐碱,利用反射把兔,將表中數(shù)據(jù)與java bean 屬性一一映射即ORM(Object Relational Mapping 對象關(guān)系映射) **

使用范圍:

在日常的開發(fā)項目中,如中小型項目瓮顽,例如ERP(Crm客戶關(guān)系管理系統(tǒng)县好,OA系統(tǒng)),需求與關(guān)系模型相對固定建議使用Hibernate,對于需求不固定的項目暖混,比如:**互聯(lián)網(wǎng)項目缕贡,建議使用mybatis**,因為**需要經(jīng)常靈活去編寫sql語句**拣播×肋洌總之,mybatis成為當(dāng)下必須學(xué)習(xí)掌握的一個持久層框架贮配。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-aw9ex5fF-1602464466565)(https://imgkr.cn-bj.ufileos.com/63b1bf51-5d8f-4ee0-954a-7210cb5a1943.png)]

## Mybatis框架搭建的方式

- 新建Maven項目

- log4j 日志添加

- resources目錄下配置文件添加

- 映射文件添加

- 實體類Customer添加

- 在父類工程pom獲取資源

- 測試

## 案例實操

### 1.新建Maven項目

**新建maven項目 ,pom文件添加依賴jar **

~~~ xml

<!-- mybatis jar 包依賴 -->

<dependency>?

? ? <groupId>org.mybatis</groupId>

? ? <artifactId>mybatis</artifactId>?

? ? <version>3.4.1</version>

</dependency>

<!-- 數(shù)據(jù)庫驅(qū)動 -->

<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文件谍倦,便于查看日志輸出信息

~~~ xml

# 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ù)庫名mybatis,表 user)

~~~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">

<!-- 添加數(shù)據(jù)庫連接相關(guān)配置信息 -->

<configuration>

? ? <environments default="development">

? ? ? ? <environment id="development">

? ? ? ? ? ? <!-- 加入事務(wù)控制 -->

? ? ? ? ? ? <transactionManager type="jdbc" />

? ? ? ? ? ? <!-- 配置數(shù)據(jù)庫連接信息 -->

? ? ? ? ? ? <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ù)量可配置多個-->

? ? <mappers>

? ? ? ? <mapper resource="com/xxx/mapper/CustomerMapper.xml" />

? ? </mappers>

</configuration>

~~~

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

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

Window-preferences-搜索xml-xml catalog

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-Ew3FMgVM-1602464466569)(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模板中對應(yīng))

Key Type:URI

Key:-//mybatis.org//DTD Mapper 3.0//EN? ? (值與xml模板中對應(yīng))

第二步:

關(guān)閉xml牧嫉,重新打開剂跟,如果重新打開不可以减途,重啟Eclipse即可。

最后點擊確定即可

### 4.映射文件添加

新建CustomerMapper.xml配置文件

~~~ 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編號? 同一命名空間(同一文件)下不可重復(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 字符串拼接形式? 無法避免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.實體類Customer添加

~~~ java

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獲取資源

~~~ xml

<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.測試

~~~ java

@Test

public void test() throws IOException {?

? ? /**? ? ?

? ? a)曹洽、讀取mybatis的配置文件? ?

? ? b)鳍置、加載配置文件創(chuàng)建SqlSessionFactory? ?

? ? c)、根據(jù)SqlSessionFactory創(chuàng)建SqlSession?

? ? d)送淆、通過sqlSession操作數(shù)據(jù)庫? ? ?

? ? e)税产、處理結(jié)果? ?

? ? f)、關(guān)閉session?

? ? */? ? ?

? ? /**? ?

? ? * 加載配置到內(nèi)存

? ? */?

? ? InputStream is= Resources.getResourceAsStream("mybatis.xml");? ?

? ? /**?

? ? *? 創(chuàng)建SqlSessionFactory 對象? hibernate 也是如此 必須先獲取SqlSessionFactory 實例化對象? ? ? */? ?

? ? SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);? ?

? ? /**? ?

? ? *? 獲取session以便操作數(shù)據(jù)庫?

? ? *? 參數(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ù)庫 關(guān)閉session? ?

? ? */?

? ? session.close();

}

~~~

## 擴(kuò)展

### MyBatis 框架體系結(jié)構(gòu)

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-oNWfSB4T-1602464466574)(https://imgkr.cn-bj.ufileos.com/71894e06-f527-4e91-ae25-8a5cac546481.png)]

說明:

#### 1 Configuration-mybatis配置

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

2)辟拷、**mybatis.xml,此文件作為mybatis的全局配置文件阐斜,配置了mybatis的運(yùn)行環(huán)境等信息**;

3)衫冻、mapper文件即sql映射文件,文件中配置了操作數(shù)據(jù)庫的sql語句谒出。**此文件需要在mybatis.xml中加載**隅俘。

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

5)为居、由會話工廠創(chuàng)建**sqlSession**即會話,操作數(shù)據(jù)庫需要通過sqlSession進(jìn)行

6)杀狡、sqlSession使用Executor(數(shù)據(jù)庫操作執(zhí)行器接口)操作數(shù)據(jù)庫蒙畴,同Executor 具體實現(xiàn)類實現(xiàn)指定dao 層數(shù)據(jù)訪問操作。

#### 2 Mapped Statement

框架底層封裝對象(sql語句呜象、輸入?yún)?shù)膳凝、輸出結(jié)果類型),它包裝了mybatis配置信息及sql映射信息等董朝,mapper文件(即Mapper.xml)中一個sql對應(yīng)一個Mapped Statement對象鸠项,sql的id即是Mapped statement的id。

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

基本和簡單類型子姜、HashMap祟绊、自定義POJO等。輸入?yún)?shù)映射就是jdbc編程中對preparedStatement設(shè)置參數(shù)哥捕,Executor通過Mapped Statement在執(zhí)行sql前將輸入的java對象映射至sql中牧抽。

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

基本和簡單類型、HashMap遥赚、自定義POJO扬舒。 Statement對sql執(zhí)行輸出結(jié)果進(jìn)行定義,輸出結(jié)果映射過程相當(dāng)于jdbc編程中對結(jié)果的解析處理過程凫佛,Executor通過Mapped Statement在執(zhí)行sql后將輸出結(jié)果映射至java對象中讲坎。

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

基本和簡單類型孕惜、HashMap、自定義POJO等晨炕。輸入?yún)?shù)映射就是jdbc編程中對preparedStatement設(shè)置參數(shù)衫画,Executor通過Mapped Statement在執(zhí)行sql前將輸入的java對象映射至sql中。

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

基本和簡單類型瓮栗、HashMap削罩、自定義POJO。 Statement對sql執(zhí)行輸出結(jié)果進(jìn)行定義费奸,輸出結(jié)果映射過程相當(dāng)于jdbc編程中對結(jié)果的解析處理過程弥激,Executor通過Mapped Statement在執(zhí)行sql后將輸出結(jié)果映射至java對象中。

這里使用Maven 工程愿阐,對應(yīng)的mybatis jar包下載通過maven 倉庫統(tǒng)一管理下載微服。

需要項目資料源碼+我們程序員小姐姐v:lezijie007(加好友時備注:B站-LT,不備注拒絕添加喲)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缨历,一起剝皮案震驚了整個濱河市职辨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌戈二,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喳资,死亡現(xiàn)場離奇詭異觉吭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)仆邓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門鲜滩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人节值,你說我怎么就攤上這事徙硅。” “怎么了搞疗?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵嗓蘑,是天一觀的道長。 經(jīng)常有香客問我匿乃,道長桩皿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任幢炸,我火速辦了婚禮泄隔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宛徊。我一直安慰自己佛嬉,他們只是感情好逻澳,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著暖呕,像睡著了一般斜做。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缰揪,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天陨享,我揣著相機(jī)與錄音,去河邊找鬼钝腺。 笑死抛姑,一個胖子當(dāng)著我的面吹牛逮栅,可吹牛的內(nèi)容都是我干的收奔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼撒会,長吁一口氣:“原來是場噩夢啊……” “哼毫目!你這毒婦竟也來了蔬啡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤镀虐,失蹤者是張志新(化名)和其女友劉穎箱蟆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刮便,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡空猜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了恨旱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辈毯。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖搜贤,靈堂內(nèi)的尸體忽然破棺而出谆沃,到底是詐尸還是另有隱情,我是刑警寧澤仪芒,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布唁影,位于F島的核電站,受9級特大地震影響掂名,放射性物質(zhì)發(fā)生泄漏夭咬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一铆隘、第九天 我趴在偏房一處隱蔽的房頂上張望卓舵。 院中可真熱鬧,春花似錦膀钠、人聲如沸掏湾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽融击。三九已至筑公,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尊浪,已是汗流浹背匣屡。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留拇涤,地道東北人捣作。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像鹅士,于是被迫代替她去往敵國和親券躁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353