Spring Boot 集成 MyBatis —— 概念篇
-
ORM框架
- 對象關係映射:Object Relational Mapping
- 出現原因:解決面向對象與關係型數據庫的不匹配而產生的技術
- 具體實現:ORM 通過使用描述對象和數據庫之間映射的元數據,將程序中的對象自動持久化到關係數據庫中。
-
Mybatis
- Mybatis就是一款標準的ORM框架,支持普通 SQL 查詢,存儲過程和高級映射的優秀持久層框架。
- MyBatis 消除了幾乎所有的JDBC 代碼和參數的手工設置以及對結果集的檢索封裝。
- MyBatis 可以使用簡單的 XML 或註解用於配置和原始映射,將接口和 Java 的實體類映射成數據庫中的記錄。
-
Mybatis優缺點
Pros Cons 1、SQL 被統一提取出來,便於統一管理和優化 1、編寫 SQL 語句時工作量很大 2、SQL 和代碼解耦,將業務邏輯和數據訪問邏輯分離,項目結構更清晰 2、SQL 語句依賴於數據庫,導致數據庫移植性差 3、提供映射標籤,支持對象與數據庫的 ORM 字段關係映射 4、靈活書寫動態 SQL,支持各種條件來動態生成不同的 SQL -
Mapper 實現方式
- 基於 XML 的 Mapper 配置文件
- 基於 Java 註解的MyBatis 註解
- 直接使用 MyBatis 提供的 API
-
Mapper 接口
- Mapper 接口是指自行定義的一個數據操作接口,類似於通常所說的 DAO
- MyBatis 會自動爲 Mapper 接口創建動態代理對象
- Mapper 接口的方法通常與 Mapper 配置文件中的 select、insert、update、delete 等 XML 結點存在對應關係
-
Mybatis 的核心接口 —— Executor
- MyBatis 中所有的 Mapper 語句的執行都是通過 Executor 進行的
-
MyBatis 的關鍵對象 —— SqlSession
- SqlSession 類似於 JDBC 的Connection
- SqlSession 對象完全包含以數據庫爲背景的所有執行 SQL 操作的方法
- 它的底層封裝了JDBC 連接,可以用 SqlSession 實例來直接執行被映射的 SQL 語句
-
MyBatis 的關鍵對象 —— SqlSessionFactory
- SqlSessionFactory是單個數據庫映射關係經過編譯後的內存鏡像
- SqlSessionFactory 對象的實例可以通過 SqlSessionFactoryBuilder 對象類獲得
- SqlSessionFactoryBuilder 可以從 XML 配置文件或預先定製的 Configuration 的實例構建出
-
Mybatis 工作流程
- 加載 Mapper 配置的 SQL 映射文件,或者是註解的相關 SQL 內容
- 創建會話工廠:MyBatis 通過讀取配置文件的信息來構造出會話工廠(SqlSessionFactory)
- 創建會話:根據會話工廠,MyBatis 就可以通過它來創建會話對象(SqlSession)。會話對象是一個接口,該接口中包含了對數據庫操作的增刪改查方法
- 創建執行器:因爲會話對象本身不能直接操作數據庫,所以它使用了一個叫做數據庫執行器
(Executor)的接口來幫它執行操作 - 封裝 SQL 對象:在這一步,執行器將待處理的 SQL 信息封裝到MappedStatement對象中,MappedStatement對象包括 SQL 語句、輸⼊入參數映射信息(Java 簡單類型、HashMap 或 POJO)和輸出結果映射信息(Java 簡單類型、HashMap 或 POJO)
- 操作數據庫:擁有了執行器和 SQL 信息封裝對象就使用它們訪問數據庫了,最後再返回操作結果,結束流程。
-
MyBatis-Spring-Boot-Starter