Spring Boot 3:Mybatis
ORM 框架是什麼
ORM(Object-Relation Mapping),是一種程式設計技術,能夠實現面向物件程式語言與關係型資料庫之間的資料轉換(對映),解決了面向物件與關係資料庫存在的互不匹配的現象。
ORM 是通過使用描述物件和資料庫之間對映的元資料,將程式中的物件自動持久化到關係資料庫中。
ORM 框架的本質是簡化程式設計中操作資料庫的編碼。
MyBatis 介紹
MyBatis 就是一款標準的 ORM 框架,被廣泛的應用於各企業開發中。
MyBatis 支援普通 SQL 查詢,儲存過程和高階對映的優秀持久層框架。
MyBatis 消除了幾乎所有的 JDBC 程式碼和引數的手工設定以及對結果集的檢索封裝。
MaBatis 可以使用簡單的 XML 或註解用於配置和原始對映。將介面和 Java 的 POJO(Plain Old Java Objects,普通的 Java 物件)對映成資料庫中的記錄。
優點:
- SQL 被統一提取出來,便於統一管理和優化
- SQL 和程式碼解耦,將業務邏輯和資料訪問邏輯分離
- 提供對映標籤,支援物件與資料庫的 ORM 欄位關係對映
- 提供物件關係對映標籤,支援物件關係元件維護
- 支援動態 SQL
缺點:
- 編寫 SQL 語句時工作量可能會大
- SQL 語句依賴於資料庫,導致資料庫移植性差
MyBatis 的概念
Mapper 配置: Mapper 配置可以使用基於 XML 的 Mapper 配置檔案來實現,也可以使用基於 Java 註解的 MyBatis 註解來實現,甚至可以直接使用 MyBatis 提供的 API 來實現。【推薦使用XML方式,業務邏輯與資料訪問邏輯相分離】
Mapper 介面: Mapper 介面是指自定義的一個數據操作介面。Mapper 介面的方法通常與 Mapper 配置檔案中的 select、insert、update、delete 等 XML 結點一一對應。【可以理解為Dao,解析的時候使用了動態代理】
Executor: MyBatis 中所有的 Mapper 語句的執行都是通過 Executor 進行的,Executor 是 MyBatis 的一個核心介面。
SqlSession: SqlSession 是 MyBatis 的關鍵物件,是執行持久化操作的獨享。SqlSession 底層封裝了 JDBC 連線,可以用 SqlSession 例項來直接執行被對映的 SQL 語句。
SqlSessionFactory: SqlSessionFactory 是 MyBatis 的關鍵物件,它是單個數據庫對映關係經過編譯後的記憶體映象。SqlSessionFactory 物件的例項可以通過 SqlSessionFactoryBuilder 物件類獲得,而 SqlSessionFactoryBuilder 則可以從 XML 配置檔案或一個預先定製的 Configuration 的例項構建出。
MyBatis 的工作流程如下:
工作流程
- 首先載入 Mapper 配置的 SQL 對映檔案,或者是註解的相關 SQL 內容。
- 建立會話工廠,MyBatis 通過讀取配置檔案的資訊來構造出會話工廠【SqlSessionFactory】。
- 建立會話。通過會話工廠,MyBatis 就可以建立會話物件【SqlSession】。會話物件是一個介面,該介面中包含了對資料庫操作的增刪改查方法。
- 建立執行器。因為會話物件本身不能直接操作資料庫,所以它使用了一個叫做資料庫執行器(Executor)的介面來幫它執行操作。
- 封裝 SQL 物件。執行器會將待處理的 SQL 資訊封裝到一個物件中【MappedStatement】,該物件包括 SQL 語句、輸入引數對映資訊和輸出結果對映資訊。
- 操作資料庫。擁有了執行器和 SQL 資訊封裝物件就可以訪問資料庫,最後再返回操作結果,結束流程。
在具體的使用過程中,按照上述的流程來執行。
使用
pom.xml
<!--mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${springboot-mybatis.version}</version> </dependency> <!--mysql連線--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <typeAlias alias="Integer" type="java.lang.Integer"/> <typeAlias alias="Long" type="java.lang.Long"/> <typeAlias alias="Map" type="java.util.Map"/> <typeAlias alias="HashMap" type="java.util.HashMap"/> <typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap"/> <typeAlias alias="ArrayList" type="java.util.ArrayList"/> <typeAlias alias="LinkedList" type="java.util.LinkedList"/> </typeAliases> </configuration>
mybatis: config-location: classpath:mybatis/mybatis-config.xml mapper-locations: classpath:mybatis/mapper/*.xml type-aliases-package: love.ning.yangxuyue.domain