淺談Mybatis持久化框架在Spring、SSM、SpringBoot整合的演進及簡化過程
阿新 • • 發佈:2020-08-02
# 前言
最近開始了SpringBoot相關知識的學習,作為為目前比較流行、用的比較廣的Spring框架,是每一個Java學習者及從業者都會接觸到一個知識點。作為Spring框架專案,肯定少不了與資料庫持久層的整合。我們在學習Java初始就被灌輸SSM框架(Spring、SpringMVC、Mybatis),我們大概也只是知道Mybatis是與資料庫打交道的,但這也只是名詞上的理解。
Mybatis具體是什麼?
MyBatis 是一款優秀的持久層框架,它支援自定義 SQL、儲存過程以及高階對映。MyBatis 免除了幾乎所有的 JDBC 程式碼以及設定引數和獲取結果集的工作。MyBatis 可以通過簡單的 XML 或註解來配置和對映原始型別、介面和 Java POJO(Plain Old Java Objects,普通老式 Java 物件)為資料庫中的記錄。
。。。。。。
這裡我就不廢話介紹了,詳細的看官方文件地址:https://mybatis.org/mybatis-3/zh/index.html
到後來開始完整的學習Mybatis、到Spring、SpringMVC、再到SpringBoot都有它的身影,它的使用及配置越來越簡單方便,可能出現這種情況,學到SpringBoot整合Mybatis發現,為什麼要這麼操作?為什麼要寫這個註解?為什麼要新增掃描包配置?那麼這篇文章就是將開始學習Mybatis到現在SpringBoot整合Mybatis的知識串起來,加深印象增加理解。
下面是我往期關於Mybatis知識點的部落格,有興趣的可以看一下。
1. [Mybatis開啟二級快取(全域性快取)的方法](https://www.cnblogs.com/tioxy/p/13060448.html)
2. [Spring學習之Spring與Mybatis的兩種整合方式](https://www.cnblogs.com/tioxy/p/13193926.html)
3. [SpringBoot學習之整合Mybatis](https://www.cnblogs.com/tioxy/p/13411078.html)
首先我也是作為Java的一名初學者,下面文章也是按照從JDBC、Mybatis、Spring、SpringMVC、再到SpringBoot的思路編寫,也是我自己的學習路線中Mybatis由繁到簡的過程。大致分為五個階段,可能後面幾個階段內容可以合併為一個階段,我為了體現Mybatis使用的方便簡化,從而作為一個階段。也可以幫助那些直接學習SpringBoot的同學理解整合Mybatis的遞進過程。如果其中有錯誤之處,也煩請各位大佬給予指正!感謝!
# 階段一:JDBC
我們在學習Mybatis之前,我們使用JDBC即資料庫連線驅動進行資料庫連線操作。
其大致操作步驟:
1. 載入驅動 `com.mysql.cj.jdbc.Driver`
2. 設定資料庫使用者名稱、密碼及URL
3. 使用 `DriverManager.getConnection(url, userName, passWord)` 建立資料庫物件
4. 建立執行Sql物件 `connection.createStatement()`
5. 通過statement物件執行具體的Sql `statement.executeQuery(sql)`
6. 最後關閉釋放連線
```java
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 1.載入驅動(固定寫法)
Class.forName("com.mysql.cj.jdbc.Driver");// 注意載入新的驅動,舊的棄用了
// 2.使用者資訊和url
String url = "jdbc:mysql://localhost:3306/school?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSl=true";// 注意新增時區引數
String userName = "root";
String passWord = "970628";
// 3.連線成功,資料庫物件
Connection connection = DriverManager.getConnection(url, userName, passWord);
// 4.執行sql的物件
Statement statement = connection.createStatement();
// 5.執行sql
String sql= "SELECT * FROM student";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()){
System.out.println("name="+resultSet.getObject("name"));
}
// 6.釋放連結
resultSet.close();
statement.close();
connection.close();
}
```
JDBC的一些問題:
- 資料庫連結建立、釋放頻繁造成系統資源浪費從而影響系統性能
- Sql語句變動比較大,每次變動都需要改動Java程式碼
- 每個一業務需要編寫大量重複的JDBC程式碼,不宜維護
# 階段二:Mybatis入門
Mybatis對jdbc的操作資料庫的過程進行封裝,使開發者只需要關注 SQL 本身,而不需要花費精力去處理例如註冊驅動、建立connection、建立statement、手動設定引數、結果集檢索等jdbc繁雜的過程程式碼。
其大致步驟:
1. 首先匯入MyBatis jar包
2. 建立 mybatis-config.xml 的核心配置檔案
```xml
```
3. 通過mybatis環境等配置資訊構造SqlSessionFactory即會話工廠,階段一中建立資料庫連線等操作都交給sqlSessionFactory來操作
4. 由會話工廠建立sqlSession即會話,操作資料庫需要通過sqlSession進行,類似於我們階段一中statement物件
```java
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
// 獲取sqlSessionFactory物件
String resource="mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
// 既然有了 SqlSessionFactory,顧名思義,我們可以從中獲得 SqlSession 的例項。
// SqlSession 提供了在資料庫執行 SQL 命令所需的所有方法。你可以通過 SqlSession 例項來直接執行已對映的 SQL 語句
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
```
5. 建立POJO對應的Mapper介面及對應的Mapper.xml檔案。我們在階段一需要寫Mapper的實現類,需要大量的JDBC操作程式碼,這裡我們通過Mapper.xml檔案實現,滿足SqlSession的呼叫。
```java
public interface StudentMapper {
// 查詢全部學生