一篇文章帶你學習JAVA MyBatis底層原理_第1頁
一篇文章帶你學習JAVA MyBatis底層原理_第2頁
一篇文章帶你學習JAVA MyBatis底層原理_第3頁
一篇文章帶你學習JAVA MyBatis底層原理_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第一篇文章帶你學習JAVAMyBatis底層原理目錄一、傳統JDBC的弊端二、mybatis介紹三、MyBatis架構圖核心類解釋工作流程四、自己通過加載xml配置走mybais流程實現例子總結

一、傳統JDBC的弊端

jdbc沒有連接池、操作數據庫需要頻繁創建和關聯鏈接,消耗資源很大。

在java中,寫原生jdbc代碼,硬編碼不易維護(比如修改sql、或傳遞參數類型時、解析結果)。

二、mybatis介紹

MyBatis是一款優秀的持久層框架,它支持自定義SQL、存儲過程以及高級映射。MyBatis免除了幾乎所有的JDBC代碼以及設置參數和獲取結果集的工作。MyBatis可以通過簡單的XML或注解來配置和映射原始類型、接口和JavaPOJO(PlainOldJavaObjects,普通老式Java對象)為數據庫中的記錄

三、MyBatis架構圖

核心類解釋

SqlSessionFactoryBuilder:

這個類可以被實例化、使用和丟棄,一旦創建了SqlSessionFactory,就不再需要它了。因此SqlSessionFactoryBuilder實例的最佳作用域是方法作用域(也就是局部方法變量)。你可以重用SqlSessionFactoryBuilder來創建多個SqlSessionFactory實例,但最好還是不要一直保留著它,以保證所有的XML解析資源可以被釋放給更重要的事情。

SqlSessionFactory:

SqlSessionFactory一旦被創建就應該在應用的運行期間一直存在,沒有任何理由丟棄它或重新創建另一個實例。使用SqlSessionFactory的最佳實踐是在應用運行期間不要重復創建多次,多次重建SqlSessionFactory被視為一種代碼“壞習慣”。因此SqlSessionFactory的最佳作用域是應用作用域。有很多方法可以做到,最簡單的就是使用單例模式或者靜態單例模式。

SqlSession:

每個線程都應該有它自己的SqlSession實例。SqlSession的實例不是線程安全的,因此是不能被共享的,所以它的最佳的作用域是請求或方法作用域。絕對不能將SqlSession實例的引用放在一個類的靜態域,甚至一個類的實例變量也不行。也絕不能將SqlSession實例的引用放在任何類型的托管作用域中,如Servlet框架中的HttpSession。如果你現在正在使用一種Web框架,考慮將SqlSession放在一個和HTTP請求相似的作用域中。換句話說,每次收到HTTP請求,就可以打開一個SqlSession,返回一個響應后,就關閉它。這個關閉操作很重要,為了確保每次都能執行關閉操作,你應該把這個關閉操作放到finally塊中。

Executor:

Executor(執行器)接口有兩個實現類,其中BaseExecutor有三個繼承類分別是BatchExecutor(重用語句并執行批量更新),ReuseExecutor(重用預處理語句preparedstatement,跟Simple的唯一區別就是內部緩存statement),SimpleExecutor(默認,每次都會創建新的statement)。

MappedStatement:

用來存放我們SQL映射文件中的信息包括sql語句,輸入參數,輸出參數等等。一個SQL節點對應一個MappedStatement對象。

工作流程

首先解釋下兩個文件

mybatis-config.xml:全局配置文件,引入了數據源、事務等mybatis運行環境;

Mapper.xml:配置映射文件,配置sql結果集封裝類型、傳參類型;

1.解析配置文件(MyBatis-config.xml、Mapper.xml),MyBatis基于XML配置文件生成Configuration,和一個個MappedStatement(包括了參數映射配置、動態SQL語句、結果映射配置),其對應著select|update|delete|insert標簽項。

2.SqlSessionFactoryBuilder創建會話工廠SqlSessionFactory。

3.SqlSessionFactory創建會話SqlSession;

4.執行器將MappedStatement對象進行解析,sql參數轉化、動態sql拼接,生成jdbcStatement對象,使用Paramterhandler填充參數,使用statementHandler綁定參數。

5.JDBC執行sql,借助MappedStatement中的結果映射關系,使用ResultSetHandler將返回結果轉化成HashMap、JavaBean等存儲結構并返回。

6.關閉sqlsession會話。

四、自己通過加載xml配置走mybais流程實現例子

獲得代理映射器代碼(在MapperProxyFactoryT):

protectedTnewInstance(MapperProxyTmapperProxy){

returnProxy.newProxyInstance(this.mapperInterface.getClassLoader(),newClass[]{this.mapperInterface

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論