mybatis存儲過程寫法:mybatis調用存儲過程詳解

簡述

本文主要介紹MyBatis框架工作原理及流程。

MyBatis介紹

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

MyBatis架構圖

Java經典面試題MyBatis工作原理及流程詳細講解

圖1 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(重用預處理語句prepared statement,跟Simple的唯一區別就是內部緩存statement),SimpleExecutor(默認,每次都會創建新的statement)。

Mapped Statement:用來存放我們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拼接,生成jdbc Statement對象,使用Paramterhandler填充參數,使用statementHandler綁定參數。

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

6、 關閉sqlsession會話。

ok,以上就是MyBatis工作原理及流程詳細講解,看完記得轉發、點贊和收藏。想了解更多內容,請關注本小編,如果有錯誤,歡迎批評指正,感謝支持。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/216290.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-08 21:55
下一篇 2024-12-08 21:55

相關推薦

發表回復

登錄後才能評論