1. 程式人生 > >淺談Mybatis持久化框架在Spring、SSM、SpringBoot整合的演進及簡化過程

淺談Mybatis持久化框架在Spring、SSM、SpringBoot整合的演進及簡化過程

# 前言 最近開始了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 { // 查詢全部學生