MyBatis入門~教你如何與數(shù)據(jù)庫更好地交互

這幾天回顧了下以前學(xué)的mybatis,特寫這篇文章來總結(jié)一下箱亿,非技術(shù)人員請繞道~如果有什么疑問跛锌,可以關(guān)注我的公眾號:多一點思考。

先來介紹下Mybatis,它是appache下開源的一款持久層框架髓帽,通過xml與java文件的緊密配合菠赚,避免了JDBC所帶來的一系列問題,比如sql硬編碼問題郑藏,讓我們更好地操作數(shù)據(jù)庫衡查,并且利于數(shù)據(jù)庫的維護。

另外值得說的一點是必盖,它與另外一個非常流行的持久層框架Hibernate的區(qū)別拌牲。Hibernate是一款完全的ORM框架,不需要程序員寫sql語句歌粥,開發(fā)效率高塌忽,但是由于sql優(yōu)化起來困難,適用于需求變化不多的項目失驶,如OA系統(tǒng)土居、CRM系統(tǒng)等。而MyBatis是一款不完全的ORM框架嬉探,它需要程序員去編寫sql語句擦耀,對sql語句優(yōu)化方便,適用于需求變化較多的互聯(lián)網(wǎng)項目涩堤。

下面就著重來說代碼結(jié)構(gòu)的東西眷蜓。(以下算是干貨吧~)

JDBC的回顧

JDBC連接數(shù)據(jù)庫的步驟如下:

a. 下載mysql-connector的jar包放到工程目錄的lib目錄,然后Build Path定躏。

b. 加載數(shù)據(jù)庫驅(qū)動账磺,得到Connection對象。

c. 編寫sql語句痊远,通過Connection對象和sql語句得到PreparedStatement對象垮抗。

d. 根據(jù)需求,執(zhí)行對應(yīng)的操作函數(shù)碧聪。(增冒版、刪、改逞姿、查)

e. 釋放資源辞嗡。

注意:如果我要修改sql語句,豈不是要重新編譯java文件滞造?這很不利于系統(tǒng)的維護续室。

單獨使用MyBatis框架

1. 配置工程結(jié)構(gòu)

步驟如下:

a. mybatis的jar包(注意有多個)、mysql-connector的jar包添加到lib目錄下面谒养,并且Build Path挺狰。

b. 新建mapper、po包以及config文件夾,并且將config文件夾添加到工程環(huán)境里面丰泊。

c. 在config文件夾下添加SqlMapConfig.xml薯定、log4j.properties、db.properties三個文件瞳购。

d. 攢寫配置文件內(nèi)容话侄。(在mybatis的pdf文件里可查)

SqlMapConfig.xml

其中:

properties標(biāo)簽加載數(shù)據(jù)庫變量。

settings標(biāo)簽設(shè)置懶加載学赛,利用resultMap進行延遲加載年堆。

environments標(biāo)簽配置數(shù)據(jù)庫。

mappers標(biāo)簽動態(tài)加載mapper文件罢屈。

log4j.properties

直接復(fù)制粘貼過去就可以嘀韧,配置日志的,將第一個開關(guān)改為DEBUG缠捌。

db.properties

將數(shù)據(jù)庫信息填上即可锄贷。

2. 編寫操作代碼

a. 在com.bing.po下新建User.java

對應(yīng)數(shù)據(jù)庫中的User表

繼承Serializable是為了讓其實現(xiàn)序列化接口,二級緩存不一定只存在于內(nèi)存曼月,這樣方便到時候讀取谊却。

b. 編寫UserMapper.xml文件,此文件用于存放對于User表操作的所有sql語句哑芹。

namespace對應(yīng)和它同名的java文件類炎辨。Mapper.xml主要存放sql語句,Mapper.java負(fù)責(zé)提供操作接口聪姿。

c. 編寫UserMapper.java文件碴萧。

方法名、參數(shù)末购、返回值對應(yīng)mapper.xml的statement的各個參數(shù)破喻。

d. 編寫執(zhí)行類。start.java

通過配置文件生成流盟榴,通過流再生成sqlsession工廠曹质。通過工廠再獲取sqlsession,調(diào)用sqlsession對象方法獲取到UserMapper操作對象擎场,這樣就能執(zhí)行內(nèi)部的方法調(diào)用sql語句羽德。

另外一些特殊的配置

1. 模糊查詢

2. 別名設(shè)置

在SqlMapConfig.xml里面配置。

3. mapper.xml與mapper.java必須在同一個包下迅办,并且方法名宅静、參數(shù)類型、返回類型必須一一對應(yīng)才能使用mapper代理站欺。

4. 延遲加載

利用association和collection標(biāo)簽來進行延遲加載姨夹,提前還必須在配置文件中開啟開關(guān)究驴。

5. ResultMap

一級緩存、二級緩存

一級緩存的每個sqlSession單獨一個存儲區(qū)域匀伏,二級緩存多個共用一個存儲區(qū)域,存儲數(shù)據(jù)結(jié)構(gòu)均為HashMap蝴韭。

主要用到的是二級緩存够颠。二級緩存是根據(jù)mapper的namespace劃分存儲區(qū)域的,如果兩個mapper的namespace相同則共享一個二級緩存區(qū)域榄鉴。

更新履磨、刪除、插入操作都會清空緩存庆尘。

分布式緩存

緩存如果放在一個單獨的服務(wù)器上剃诅,客戶端連接到另外一個服務(wù)器上(真實開發(fā)環(huán)境肯定不止一個服務(wù)器),就無法訪問到另外一個服務(wù)器的緩存驶忌,這時候需要有一個好的分布式緩存框架矛辕,如redis,memecache,ehcache。

這些緩存框架的特點:少量數(shù)據(jù)存儲付魔,高速讀寫訪問聊品,數(shù)據(jù)一致性保證,支持k/v類型數(shù)據(jù)几苍,NoSql翻屈。

MyBatis整合Spring

1. jar包以及Buid Path

Spring、mybatis妻坝、mybatis和spring整合伸眶、mysql-connector、common-jbcp刽宪、commons-pool-1.6的jar包

2. 工程結(jié)構(gòu)

3. 配置文件

SqlMapConfig.xml

數(shù)據(jù)庫連接以及mapper加載都放在了Spring的配置文件里厘贼,所以這里不用寫了。

ApplicationContext.xml

通過數(shù)據(jù)源以及SqlMapConfig.xml配置文件注冊SqlSession工廠纠屋,并且掃描mapper文件注冊mapper對象涂臣。

4. 執(zhí)行文件

UserMapper.xml UserMapper.java略過。

start.java

另外注意jdk版本為1.7

逆向工程

簡單來講售担,先建立數(shù)據(jù)庫表赁遗,根據(jù)數(shù)據(jù)表自動生成對應(yīng)的mapper.xml與mapper.java文件,并且提供很多方法族铆,非常方便岩四。方法自行百度。為了快速創(chuàng)建工程哥攘,學(xué)習(xí)逆向工程是必須的剖煌。

微信公眾號:多一點思考材鹦,歡迎關(guān)注!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末耕姊,一起剝皮案震驚了整個濱河市桶唐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茉兰,老刑警劉巖尤泽,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異规脸,居然都是意外死亡坯约,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門莫鸭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闹丐,“玉大人,你說我怎么就攤上這事被因∏渌” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵梨与,是天一觀的道長巍棱。 經(jīng)常有香客問我,道長蛋欣,這世上最難降的妖魔是什么航徙? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮陷虎,結(jié)果婚禮上到踏,老公的妹妹穿的比我還像新娘推溃。我一直安慰自己族展,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布访忿。 她就那樣靜靜地躺著凿掂,像睡著了一般伴榔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庄萎,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天踪少,我揣著相機與錄音,去河邊找鬼糠涛。 笑死援奢,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的忍捡。 我是一名探鬼主播集漾,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼切黔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了具篇?” 一聲冷哼從身側(cè)響起纬霞,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎驱显,沒想到半個月后险领,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡秒紧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了挨下。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熔恢。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖臭笆,靈堂內(nèi)的尸體忽然破棺而出叙淌,到底是詐尸還是另有隱情,我是刑警寧澤愁铺,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布鹰霍,位于F島的核電站,受9級特大地震影響茵乱,放射性物質(zhì)發(fā)生泄漏茂洒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一瓶竭、第九天 我趴在偏房一處隱蔽的房頂上張望督勺。 院中可真熱鬧,春花似錦斤贰、人聲如沸智哀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓷叫。三九已至,卻和暖如春送巡,著一層夾襖步出監(jiān)牢的瞬間摹菠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工骗爆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辨嗽,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓淮腾,卻偏偏與公主長得像糟需,于是被迫代替她去往敵國和親屉佳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355

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