1. 程式人生 > >Spring Boot 3:Mybatis

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