Mybatis學習-GetMybatisInMyHead

CodeDancing發表於2021-06-06

認知

​ 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):

  1. 子查詢的方式:利用父查詢的某欄位查詢出關聯物件的資訊輸出,這種方式SQL程式碼簡單但是.xml檔案邏輯複雜
  2. 聯表查詢的方式:直接利用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級快取,會話關閉時一級快取刷寫到二級快取中,

  • 查詢順序:二級快取 -> 一級快取 -> 資料庫

相關文章