說到流程這個事兒,大家可能最先想到的就是富士康的流水線,標準化的分工讓每道工序都如絲一般潤滑,所以才成就了富士康&34;的名號。
想當年猿小二也是眾多流水線工人中的一員,每天成百上千次的重複著同一個動作;突然有一天猿小二頓悟了,他認為我不能在這裡浪費青春,我要去改變世界,於是他決定學習Java,沒想到這可一發不可收拾,學起Java來,如久旱逢甘霖,如魚得水一樣的輕鬆順暢。
但是好景不長,最近他就在學習MyBatis這裡遇到了點小麻煩,總是搞不清楚,MyBatis是怎麼一個接口、一個映射文件(寫sql)就可以操作資料庫了呢?它的執行流程到底是怎麼樣的呢?帶著這樣的疑問,猿小二開始了他的探索....
說到MyBatis執行流程,估計80%的程式設計師可能每天都沉浸在一個接口方法、一條SQL快樂的coding中,也可能他們都在忙著陪女朋友(可能性不大,因為程式設計師沒有女朋友),也可能是沒有時間研究;也可能覺得使用起來很簡單,不就是加載配置文件,執行SQL嗎,soeasy;但是作為一個勵志成為優秀工程師的程序猿,僅僅停留在這個層面還遠遠不夠,它根本滿足不了我們對技術的渴望。
核心流程介紹
我們都知道MyBtis是對JDBC的簡易封裝,它的出現某種程度了是為了消除所有的JDBC代碼和參數的手工設置以及結果集的封裝問題;不管怎樣,JDBC的那一套還是不會變的,只是做了抽象、封裝、歸類等;所以想要理解MyBatis的執行流程,那就不得不先回顧一下JDBC的執行流程。
JDBC執行六部走
以上就是JDBC操作數據的流程步驟,然後我看下MyBatis的執行流程圖。
MyBatis執行八步走
上面流程就是MyBatis內部核心流程,咱們來一步步解釋下,根據圖中步驟,我們可以將這個執行流程分成了8個步驟。
<!-- 使用包路徑,掃描包下所有的接口,這種方式比較方便 -->
<package name=&34;/> <!-- resource:使用相對路徑的資源引用--> <!-- url:使用絕對類路徑的資源引用--> <!-- class:使用映射器接口實現類的完全限定類名--> <mapper resource=&34;/>
// 2. 創建SqlSessionFactory對象實際創建的是DefaultSqlSessionFactory對象 SqlSessionFactory builder = new SqlSessionFactoryBuilder().build(inputStream);
// 3. 創建SqlSession對象實際創建的是DefaultSqlSession對象 SqlSession sqlSession = builder.openSession();
<!--一個動態sql標籤就是一個`MappedStatement`對象--> <select id=&34; resultType=&34;> select * from t_user </select>
我們再來看一下這個完整的執行步驟,代碼如下:
/** * Mybatis測試 */ public class MybatisTest { public static void main(String[] args) throws Exception { // 1.加載配置文件 InputStream inputStream = Resources.getResourceAsStream(&34;); // 2. 創建SqlSessionFactory對象實際創建的是DefaultSqlSessionFactory對象 SqlSessionFactory builder = new SqlSessionFactoryBuilder().build(inputStream); // 3. 創建SqlSession對象實際創建的是DefaultSqlSession對象 SqlSession sqlSession = builder.openSession(); // 4. 創建代理對象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); // 5. 執行查詢語句 List<User> users = mapper.selectUserList(); // 6. 釋放資源 sqlSession.close(); inputStream.close(); } }
通過分析Mybatis的執行流程,我們可以發現它和JDBC基本大同小異,比較明顯的地方就是:
至於其他的部分,如執行sql預編譯、執行查詢、封裝結果集等都是抽取到了其他的類中來完成這些操作。通過對JDBC執行步驟來對比分析MyBatis的執行的流程,總體上來看它們的執行步驟基本是一樣的,所以大家是不是覺得MyBatis這個框架其實也挺簡單的,總結下其實就是: