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

  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級快取,會話關閉時一級快取刷寫到二級快取中,

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

Tags: