



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第一篇文章帶你學習JAVAMyBatis底層原理目錄一、傳統(tǒng)JDBC的弊端二、mybatis介紹三、MyBatis架構(gòu)圖核心類解釋工作流程四、自己通過加載xml配置走mybais流程實現(xiàn)例子總結(jié)
一、傳統(tǒng)JDBC的弊端
jdbc沒有連接池、操作數(shù)據(jù)庫需要頻繁創(chuàng)建和關(guān)聯(lián)鏈接,消耗資源很大。
在java中,寫原生jdbc代碼,硬編碼不易維護(比如修改sql、或傳遞參數(shù)類型時、解析結(jié)果)。
二、mybatis介紹
MyBatis是一款優(yōu)秀的持久層框架,它支持自定義SQL、存儲過程以及高級映射。MyBatis免除了幾乎所有的JDBC代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作。MyBatis可以通過簡單的XML或注解來配置和映射原始類型、接口和JavaPOJO(PlainOldJavaObjects,普通老式Java對象)為數(shù)據(jù)庫中的記錄
三、MyBatis架構(gòu)圖
核心類解釋
SqlSessionFactoryBuilder:
這個類可以被實例化、使用和丟棄,一旦創(chuàng)建了SqlSessionFactory,就不再需要它了。因此SqlSessionFactoryBuilder實例的最佳作用域是方法作用域(也就是局部方法變量)。你可以重用SqlSessionFactoryBuilder來創(chuàng)建多個SqlSessionFactory實例,但最好還是不要一直保留著它,以保證所有的XML解析資源可以被釋放給更重要的事情。
SqlSessionFactory:
SqlSessionFactory一旦被創(chuàng)建就應(yīng)該在應(yīng)用的運行期間一直存在,沒有任何理由丟棄它或重新創(chuàng)建另一個實例。使用SqlSessionFactory的最佳實踐是在應(yīng)用運行期間不要重復創(chuàng)建多次,多次重建SqlSessionFactory被視為一種代碼“壞習慣”。因此SqlSessionFactory的最佳作用域是應(yīng)用作用域。有很多方法可以做到,最簡單的就是使用單例模式或者靜態(tài)單例模式。
SqlSession:
每個線程都應(yīng)該有它自己的SqlSession實例。SqlSession的實例不是線程安全的,因此是不能被共享的,所以它的最佳的作用域是請求或方法作用域。絕對不能將SqlSession實例的引用放在一個類的靜態(tài)域,甚至一個類的實例變量也不行。也絕不能將SqlSession實例的引用放在任何類型的托管作用域中,如Servlet框架中的HttpSession。如果你現(xiàn)在正在使用一種Web框架,考慮將SqlSession放在一個和HTTP請求相似的作用域中。換句話說,每次收到HTTP請求,就可以打開一個SqlSession,返回一個響應(yīng)后,就關(guān)閉它。這個關(guān)閉操作很重要,為了確保每次都能執(zhí)行關(guān)閉操作,你應(yīng)該把這個關(guān)閉操作放到finally塊中。
Executor:
Executor(執(zhí)行器)接口有兩個實現(xiàn)類,其中BaseExecutor有三個繼承類分別是BatchExecutor(重用語句并執(zhí)行批量更新),ReuseExecutor(重用預處理語句preparedstatement,跟Simple的唯一區(qū)別就是內(nèi)部緩存statement),SimpleExecutor(默認,每次都會創(chuàng)建新的statement)。
MappedStatement:
用來存放我們SQL映射文件中的信息包括sql語句,輸入?yún)?shù),輸出參數(shù)等等。一個SQL節(jié)點對應(yīng)一個MappedStatement對象。
工作流程
首先解釋下兩個文件
mybatis-config.xml:全局配置文件,引入了數(shù)據(jù)源、事務(wù)等mybatis運行環(huán)境;
Mapper.xml:配置映射文件,配置sql結(jié)果集封裝類型、傳參類型;
1.解析配置文件(MyBatis-config.xml、Mapper.xml),MyBatis基于XML配置文件生成Configuration,和一個個MappedStatement(包括了參數(shù)映射配置、動態(tài)SQL語句、結(jié)果映射配置),其對應(yīng)著select|update|delete|insert標簽項。
2.SqlSessionFactoryBuilder創(chuàng)建會話工廠SqlSessionFactory。
3.SqlSessionFactory創(chuàng)建會話SqlSession;
4.執(zhí)行器將MappedStatement對象進行解析,sql參數(shù)轉(zhuǎn)化、動態(tài)sql拼接,生成jdbcStatement對象,使用Paramterhandler填充參數(shù),使用statementHandler綁定參數(shù)。
5.JDBC執(zhí)行sql,借助MappedStatement中的結(jié)果映射關(guān)系,使用ResultSetHandler將返回結(jié)果轉(zhuǎn)化成HashMap、JavaBean等存儲結(jié)構(gòu)并返回。
6.關(guān)閉sqlsession會話。
四、自己通過加載xml配置走mybais流程實現(xiàn)例子
獲得代理映射器代碼(在MapperProxyFactoryT):
protectedTnewInstance(MapperProxyTmapperProxy){
returnProxy.newProxyInstance(this.mapperInterface.getClassLoader(),newClass[]{this.mapperInterface
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年機構(gòu)策劃定制旅游服務(wù)協(xié)議范例
- 2025年工業(yè)項目拆除補償協(xié)議規(guī)范
- 鄉(xiāng)村教師教育能力提升的具體措施
- 公共文化服務(wù)體系的創(chuàng)新與實踐
- 跨界合作助推工業(yè)園區(qū)創(chuàng)新發(fā)展
- 2025年學生視力保護:課間操與眼保健操實施標準
- 2025年歐幾里得競賽解析幾何專項突破模擬試卷(坐標與向量)-精講精練版
- 2025年鄉(xiāng)村醫(yī)生考試必看:農(nóng)村醫(yī)療衛(wèi)生機構(gòu)管理醫(yī)療質(zhì)量管理與持續(xù)改進案例分析試題
- 非遺保護中的活態(tài)傳承策略
- 咖啡文化與制作(第二版)課件全套 01-咖啡的發(fā)現(xiàn)傳播經(jīng)濟規(guī)模與發(fā)展-09-咖啡與健康
- 建筑工程技術(shù)專業(yè)實習總結(jié)
- 女裝專業(yè)知識
- 二年級語文下冊第一至八單元復習教案
- 西門子數(shù)字化制造數(shù)據(jù)采集與管理系統(tǒng)(SCADA)描述兩份文件
- HYT 083-2005 海草床生態(tài)監(jiān)測技術(shù)規(guī)程(正式版)
- 捐贈行為中的神經(jīng)科學研究
- 護理交接班質(zhì)控總結(jié)
- MOOC 中國稅法:案例·原理·方法-暨南大學 中國大學慕課答案
- 2024年西藏中考地理測試(原卷版)
- (正式版)QBT 5998-2024 寵物尿墊(褲)
- (正式版)HGT 6276-2024 雙酚F型環(huán)氧樹脂
評論
0/150
提交評論