MyBatis相關
概念
-
MyBatis是一個半ORM框架,它內部封裝了JDBC,開發時只需要關注SQL語句本身。程式設計師直接編寫原生態sql語句,可以嚴格控制sql執行效能,靈活度高
MyBatis從執行sql語句到返回results的過程
-
通過xml或註解的方式將要執行的statement配置起來
-
通過Java物件和statement中sql的動態引數進行對映生成最終執行的sql語句
-
MyBatis框架執行sql並將結果對映為Java物件返回
Dao/Mapper介面的工作原理
-
JDK動態代理,MyBatis執行時會使用JDK動態代理為Mapper介面生成代理物件proxy,代理物件會攔截介面方法,轉而執行MapperStatement所代表的sql,然後返回sql執行結果
延遲載入
-
MyBatis僅支援association關聯物件和collection關聯物件的延遲載入
-
它的原理是,使用CGLIB建立目標物件的代理物件,當呼叫目標方法時,進入攔截器方法,比如呼叫a.getB().getName(),攔截器invoke()方法發現a.getB()是null值,那麼就會單獨傳送事先儲存好的查詢關聯B物件的sql,把B查詢上來,然後呼叫a.setB(b),於是a的物件b屬性就有值了,接著完成a.getB().getName()方法的呼叫。這就是延遲載入的基本原理。
MyBatis的一級、二級快取
-
一級快取:基於PerpetualCache,使用HashMap本地儲存,儲存作用域為Session,一級快取預設開啟,當Session flush或close之後,該Session中的所有Cache將清空
-
二級快取:基於PerpetualCache,使用HashMap儲存,儲存作用域為Mapper(namespace),可以自定義儲存源,預設不開啟二級快取,如果要開啟二級快取,需要實現序列化介面,並在對映檔案中配置<cache/>
-
快取更新:當某個作用域進行了C/D/U操作後,預設該作用域下select中的快取將被clear並重新更新,如果開啟了二級快取,則只根據配置判斷是否重新整理
使用MyBatis的Mapper介面呼叫時的要求
-
Mapper介面方法名要和mapper.xml中定義的每個sql的id相同
-
Mapper介面輸入引數的型別要和mapper.xml中每個sql的parameter Type型別相同
-
Mapper介面輸出引數的型別要和mapper.xml中每個sql語句的resultType的型別相同
-
Mapper介面的類路徑要和mapper.xml檔案中的namespace相同
相關文章
- Mybatis相關:基於註解的Mybatis開發MyBatis
- MyBatis框架的使用解析!資料庫相關API的基本介紹MyBatis框架資料庫API
- 2020-11-30 Mybatis 學習筆記 (二)建立java相關類MyBatis筆記Java
- Solon詳解(11)- Mybatis 與 Solon 相親相愛MyBatis
- mybatis關聯關係對映MyBatis
- PHP相關PHP
- AndroidJNI相關Android
- 【Unity】相關Unity
- PDN相關
- Linux相關Linux
- Git相關Git
- Cookie相關Cookie
- 硬碟相關硬碟
- sql相關SQL
- elasticsearch相關Elasticsearch
- CentOS相關CentOS
- swoole 相關
- npm 相關NPM
- bean相關Bean
- RFID相關
- spring 相關Spring
- mysql 相關MySql
- nginx相關Nginx
- SLAM相關SLAM
- FutureTask相關
- Docker相關Docker
- gitlab 相關Gitlab
- 統計學三大相關係數之Pearson相關係數、Spearman相關係數
- MySQL鎖相關MySql
- springboot 相關注解Spring Boot
- elasticsearch相關2Elasticsearch
- BGP相關命令
- Java Bean相關JavaBean
- Spring配置相關Spring
- Oracle相關命令Oracle
- vue 相關收集Vue
- Git 相關配置Git
- mysql 索引相關MySql索引