MyBatis相關面試題
MyBatis相關面試題
1.Mybatis執行流程
讀取Mybatis框架核心配置Mybatis-config.xml(數據庫原信息/隱射文件)------>會構建一個會話工廠sqlSessionFactory(會話工廠,全局就這一個生產sqlSession)----->創建會話SqlSession(項目與數據庫的會話,包含了執行sql語句的所有方法,每次操作一次會話有多個)------->會有一個Executor執行器(真正執行數據庫操作接口,也負責查詢緩存(一級緩存二級緩存等)的維護)------->里面有一個MappedStatemnet參數封裝參數

面試回答
①讀取MyBatis配置文件:mybatis-config.xml加載運行環境和映射文件
②構造會話工廠SqlSessionFactory
③ 會話工廠創建SqlSession對象(包含了執行SQL語句的所有方法)
④ 操作數據庫的接口,Executor執行器,同時負責查詢緩存的維護
⑤ Executor接口的執行方法中有一個MappedStatement類型的參數,封裝了映射信息
⑥ 輸入參數映射
⑦ 輸出結果映射
2.Mybatis是否支持延遲加載
支持延遲加載,需要用導數據再加載不需要就不加載 但是默認沒有開啟 用fetchType="lazy"來設置
還可以設置全局的延遲加載 使用的是代理對象來實現的延遲加載
實現原理
1.使用CGLIB創建目標對象的代理對象
2.當調用目標方法user.aetOrderlist0時,進入攔截器invoke方法,發現user.getOrderlist0是nul值,執行sal查詢order列表
3.把order查詢上來,然后調用user.setOrderList(List

3.一級緩存二級緩存
本地緩存:基于PerpetualCache本質是一個Hashmap
一級緩存:作用域是session級別的
二級緩存:作用域是namespace和mapper的作用域,不依賴于seeion 默認是關閉的
一級緩存:基于PerpetualCache的Hashmap本地緩存,作用域是Session,當Session進行flsh和close之后,該Seeion中的所有Cache就被清空,默認打開的一級緩存
二級緩存:基于namespace和mapper的作用域,不依賴于SQLSession默認采用的也是PerpetualCached的HashMap存儲的 默認是關閉的
-
到全局配置中打開
-
2.到mapper文件中加入
標簽
注意事項:二級緩存緩存的數據必須實現Serializable接口 對緩存數據更新之后默認刪除緩存

浙公網安備 33010602011771號