認知
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級快取,會話關閉時一級快取刷寫到二級快取中,
-
查詢順序:二級快取 -> 一級快取 -> 資料庫