你知道目前最流行的Mybatis框架嗎酒贬?如何搭建呢吧恃?

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í)掌握的一個持久層框架类垦。

Mybatis框架搭建的方式

新建Maven項目

log4j 日志添加

resources目錄下配置文件添加

映射文件添加

實體類Customer添加

在父類工程pom獲取資源

測試

案例實操

1.新建Maven項目

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

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

# 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)

<?xmlversion="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>

<environmentsdefault="development">

<environmentid="development">

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

<transactionManagertype="jdbc"/>

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

<dataSourcetype="pooled">

<propertyname="driver"value="com.mysql.jdbc.Driver"/>

<propertyname="url"value="jdbc:mysql://127.0.0.1:3306/spring-test"/>

<propertyname="username"value="root"/>

<propertyname="password"value=""/>

</dataSource>

</environment>

</environments>

<!-- mapper 配置文件指定 文件數(shù)量可配置多個-->

<mappers>

<mapperresource="com/xxx/mapper/CustomerMapper.xml"/>

</mappers>

</configuration>

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

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

Window-preferences-搜索xml-xml catalog

在User Specified Entries目錄下? add->

Locattion:http://mybatis.org/dtd/mybatis-3-mapper.dtd? ? (值與xml模板中對應(yīng))Key Type:URIKey:-//mybatis.org//DTD Mapper 3.0//EN? ? (值與xml模板中對應(yīng))第二步:關(guān)閉xml蚤认,重新打開米苹,如果重新打開不可以,重啟Eclipse即可砰琢。

最后點擊確定即可

4.映射文件添加

新建CustomerMapper.xml配置文件

<?xmlversion="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 注入 ? ?

-->

<mappernamespace="com.xxx.mapper.customerMapper">

<!-- 查詢客戶-->

<selectid="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添加

packagecom.xxx.pojo;

?

publicclassCustomer{

privateintid;

privateStringuserName;

privateStringuserBalance;

?

publicintgetId() {

returnid;

?? }

?

publicvoidsetId(intid) {

this.id=id;

?? }

?

publicStringgetUserName() {

returnuserName;

?? }

?

publicvoidsetUserName(StringuserName) {

this.userName=userName;

?? }

?

publicStringgetUserBalance() {

returnuserBalance;

?? }

?

publicvoidsetUserBalance(StringuserBalance) {

this.userBalance=userBalance;

?? }

?

@Override

publicStringtoString() {

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

@Test

publicvoidtest()throwsIOException{

/** ? ? ?

a)蘸嘶、讀取mybatis的配置文件 ? ?

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

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

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

e)褥蚯、處理結(jié)果 ? ?

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

*/

/** ? ?

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

*/

InputStreamis=Resources.getResourceAsStream("mybatis.xml");

/** ?

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

SqlSessionFactoryfactory=newSqlSessionFactoryBuilder().build(is);

/** ? ?

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

*? 參數(shù)一:指定UserMapper.xml 映射文件id? 必須加入命名空間 ? ?

*? 參數(shù)二: 指定輸入?yún)?shù) ? ?

*/

SqlSessionsession=factory.openSession();

Customercustomer=session.selectOne("com.xxx.mapper.customerMapper.queryCustomerById",2);

/** ? ?

* 將返回的結(jié)果輸出 ? ?

*/

System.out.println(customer);

/** ?

* 操作完數(shù)據(jù)庫 關(guān)閉session ? ?

*/

session.close();

}

擴展

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

說明:

1 Configuration-mybatis配置

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

2)赞庶、mybatis.xml,此文件作為mybatis的全局配置文件巡通,配置了mybatis的運行環(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對象中逛艰。

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

需要視頻散怖、文檔的在評論區(qū)留言扣1

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市肄渗,隨后出現(xiàn)的幾起案子镇眷,更是在濱河造成了極大的恐慌,老刑警劉巖翎嫡,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件欠动,死亡現(xiàn)場離奇詭異,居然都是意外死亡惑申,警方通過查閱死者的電腦和手機具伍,發(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
  • 那天憔维,我揣著相機與錄音涛救,去河邊找鬼。 笑死业扒,一個胖子當(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
  • 我被黑心中介騙來泰國打工脐供, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人借跪。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓政己,卻偏偏與公主長得像,于是被迫代替她去往敵國和親掏愁。 傳聞我的和親對象是個殘疾皇子歇由,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

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