你知道目前最流行的Mybatis框架嗎厚棵?如何搭建呢蕉世?

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

MyBatis 本是apache的一個開源項(xiàng)目iBatis, 2010年這個項(xiàng)目由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低熙含;同時(shí)靈活性高,特別適用于業(yè)務(wù)模型易變的項(xiàng)目艇纺,使用范圍廣怎静。

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

使用范圍:

在日常的開發(fā)項(xiàng)目中掷匠,如中小型項(xiàng)目是嗜,例如ERP(Crm客戶關(guān)系管理系統(tǒng),OA系統(tǒng)),需求與關(guān)系模型相對固定建議使用Hibernate,對于需求不固定的項(xiàng)目款青,比如:互聯(lián)網(wǎng)項(xiàng)目,建議使用mybatis欧芽,因?yàn)?b>需要經(jīng)常靈活去編寫sql語句飞傀。總之袋毙,mybatis成為當(dāng)下必須學(xué)習(xí)掌握的一個持久層框架型檀。

Mybatis框架搭建的方式

新建Maven項(xiàng)目

log4j 日志添加

resources目錄下配置文件添加

映射文件添加

實(shí)體類Customer添加

在父類工程pom獲取資源

測試

案例實(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ù)庫驅(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)

<?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><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:URI

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

第二步:

關(guān)閉xml胀溺,重新打開裂七,如果重新打開不可以,重啟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編號? 同一命名空間(同一文件)下不可重復(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.實(shí)體類Customer添加

packagecom.xxx.pojo;publicclassCustomer{privateintid;privateString userName;privateString userBalance;publicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicStringgetUserName(){returnuserName;}publicvoidsetUserName(String userName){this.userName=userName;}publicStringgetUserBalance(){returnuserBalance;}publicvoidsetUserBalance(String userBalance){this.userBalance=userBalance;}@OverridepublicStringtoString(){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.測試

@Testpublicvoidtest()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)存

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

? ? *? 創(chuàng)建SqlSessionFactory 對象? hibernate 也是如此 必須先獲取SqlSessionFactory 實(shí)例化對象? ? ? */SqlSessionFactory factory=newSqlSessionFactoryBuilder().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)

說明:

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 具體實(shí)現(xiàn)類實(shí)現(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)一管理下載。

?著作權(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)我...
    茶點(diǎn)故事閱讀 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
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡像云,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚂夕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迅诬。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖婿牍,靈堂內(nèi)的尸體忽然破棺而出侈贷,到底是詐尸還是另有隱情,我是刑警寧澤等脂,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布俏蛮,位于F島的核電站,受9級特大地震影響上遥,放射性物質(zhì)發(fā)生泄漏搏屑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一粉楚、第九天 我趴在偏房一處隱蔽的房頂上張望辣恋。 院中可真熱鬧亮垫,春花似錦、人聲如沸伟骨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽携狭。三九已至继蜡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逛腿,已是汗流浹背稀并。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鳄逾,地道東北人稻轨。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像雕凹,于是被迫代替她去往敵國和親殴俱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

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