Mybatis學習-GetMybatisInMyHead
認知
MyBatis 是一款優秀的持久層框架,它支援自定義 SQL、存儲過程以及高級映射。MyBatis 免除了幾乎所有的 JDBC 程式碼以及設置參數和獲取結果集的工作。MyBatis 可以通過簡單的 XML 或註解來配置和映射原始類型、介面和 Java POJO(Plain Old Java Objects,普通老式 Java 對象)為資料庫中的記錄。
最近在鵝廠實習,也是在工作需要什麼就去學習什麼,本篇部落格是實習過程中學習Mybatis的一點總結和記錄,目的是為了方便自己以後使用Mybatis。
操作基本流程
1、配置mybatis-config.xml文件
該文件是Mybatis的必備文件,當然也可以採取程式碼中set的方式,但是不推薦。
配置優化
這些配置都可以在中文文檔中找到,這裡主要是記錄下使用到的配置
- 別名優化,避免使用全類名
- 屬性優化,自動駝峰轉換、日誌工廠等等
- 單獨配置資料庫連接配置文件..........
2、編寫工具類,獲取SqlSession
過程:SqlSessionFactoryBuilder -> SqlSessionFactory -> SqlSession
該方法應該編寫為一個靜態方法,用於不斷獲取SqlSession連接。獲取的連接可以指定是否自動提交
同時這裡可以看到SqlSessionFactory明顯是單例模式,SqlSession是工廠模式。
3、編寫需要的POJO和對應的POJOMapper(inteface)
這裡就是Mybatis的好處了,可以將資料庫查詢出來的數據直接匹配到Java普通對象上去。
lombak插件
對於POJO類,需要編寫屬性名、無參構造方法,[有參構造方法],Getter和Setter方法以及toString方法。可以採用lombak插件進行簡化程式碼編寫,通過@Data和@NoArgsConstructor和@AllArgsConstructor來自動生成方法,只需要編寫屬性名即可。
4、編寫POJOMapper.xml或者註解方式
這裡就是實現POJOMapper中定義的方法,複雜的語句或者結果集映射最好採用.xml方式,簡單的語句採用@註解方式即可。
.xml 方式
在這種方式下能使用Mybatis功能更多,同時也更加靈活
ResultMap結果集映射
- 簡單的結果集映射(一對一):僅僅是修改欄位和SQL查詢出來的欄位不一致的情況。
- 複雜的結果集映射(多對一):查詢出來的數據欄位對應著一個對象,但是該對象包含著另外一種對象,這時候就要使用到association標籤,例如練習程式碼中多位學生對應著一位老師,每個學生對象中包含著老師對象。
- 複雜的結果集映射(一對多):查詢出來的數據表示著一個對象,但是該對象包含著另外一種對象的集合,這時候就要使用到collection標籤,例如練習程式碼中一位老師對應著多位學生,每個老師對象中包含著學生對象的集合。
使用複雜結果集映射可以採用兩種方式(例子見練習程式碼mybatis-05):
- 子查詢的方式:利用父查詢的某欄位查詢出關聯對象的資訊輸出,這種方式SQL程式碼簡單但是.xml文件邏輯複雜
- 聯表查詢的方式:直接利用join的方式寫出對應的SQL程式碼,然後在.xml文件中寫出查詢欄位的結果映射即可。
動態SQL
動態SQL的目的是減少在Java程式碼的SQL語句的邏輯判斷拼接和避免重複SQL(重複指的是僅僅只是where或者是set不同)的編寫(例子見練習程式碼mybatis-06)。
- <if 標籤 類似於if
- <choose <when <otherwise 標籤 類似於switch
- <where <set 標籤 是<trim標籤的特殊情況,可以用來代替SQL語句中where和set關鍵字
- <sql <include 標籤 程式碼片段,可以使用相同的程式碼片段
- <foreach 標籤,生成一段可以控制開頭符號、結尾符號和分隔符的SQL語句
註解方式
在這種方式下能使用基本的SQL語句和映射
- @Insert(插入SQL)
- @Delete(刪除SQL)
- @Update(更新SQL)
- @Select(查詢SQL)
- @Parm(欄位別名)
5、註冊Mapper
在mybatis-config文件中註冊mapper,有三種方式:
- resource:指定.xml文件的路徑,如果只採用了註解的方式,那麼就不能用該方式註冊Mapper
- package:指定.xml文件包名,必須要保證POJOMapper和POJOMapper.xml在一包下,同時如果只採用了註解方式沒有問題。
- class:指定註冊Mapper的全類名,必須要保證POJOMapper和POJOMapper.xml在一包下同時如果只採用了註解方式沒有問題。
6、測試
Mybatis快取
-
一級快取,會話級快取,默認開啟不可關閉。增刪改操作會刷新快取,除非設置不刷新
-
二級快取,Mapper級快取,會話關閉時一級快取刷寫到二級快取中,
-
查詢順序:二級快取 -> 一級快取 -> 資料庫

