這幾天回顧了下以前學(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)注!