3、集成MyBatis
3.1 MyBatis 概述
3.1.1 核心功能和優勢
MyBatis 是一個 Java 持久層框架,它通過 XML 或注解配置 SQL 語句,將 Java 方法與 SQL 語句映射起來,消除了大量的 JDBC 代碼,簡化了數據庫操作。MyBatis 的核心功能和優勢包括:
- ORM(對象關系映射):通過 XML 配置文件或注解將 Java 對象與數據庫表映射,自動化對象數據與數據庫記錄之間的轉換。
- 動態 SQL:基于輸入參數動態生成 SQL 語句,靈活處理各種查詢條件。
- 代碼簡化:通過配置管理 SQL 語句,減少了手動編寫 JDBC 的代碼量。
- 跨數據庫支持:支持多種數據庫,如 MySQL、Oracle、PostgreSQL 等,提高了應用程序的可移植性。
- 與 Spring 集成:與 Spring 框架無縫集成,支持聲明式事務管理和依賴注入。
3.1.2 動態 SQL 功能
MyBatis 的動態 SQL 功能允許在運行時根據條件動態生成 SQL 語句。常用的動態 SQL 元素包括:
<if>
:根據條件包含或排除某個 SQL 片段。<choose>
:類似于 if-else,根據條件選擇一個 SQL 片段。<trim>
:用于修飾周圍的內容,如去除多余的 AND 或 OR。<foreach>
:用于批量處理,遍歷集合參數。<set>
:用于更新語句,動態包含字段。
示例:
<select id="findUserByCondition" resultType="User"> SELECT * FROM users <where> <if test="username != null"> username LIKE '%'${username}'%' </if> <if test="email != null"> AND email = '${email}' </if> </where>
</select>
3.2 與 Spring Boot 集成
3.2.1 依賴和自動配置
在 Spring Boot 項目中集成 MyBatis,在pom.xml文件中添加Mybatis,Spring web 等相關依賴
<!--lombok-->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version>
</dependency><!--mysql-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version>
</dependency><!--mybatis-->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version>
</dependency><!--druid-->
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.21</version>
</dependency><!-- spring web 需要的包 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope>
</dependency>
3.2.2 創建映射文件
MyBatis 的 SQL 映射文件需要放置在 src/main/resources
目錄下,具體路徑與包結構對應。例如:在resources目錄下創建一個mapper文件夾,用來存儲所有的mapper.xml文件
src/main/resources/ └── mapper └── UserMapper.xml
3.2.3 @Mapper 接口和掃描
在 Spring Boot 中,可以通過 @Mapper
注解標記 Mapper 接口,或者通過 @MapperScan
掃描指定包下的所有 Mapper 接口。
- 使用 @Mapper 注解
@Mapper
public interface UserMapper { List<User> findAllUsers(); User findUserById(Long id); void insertUser(User user);
}
-
配置 @MapperScan
在入口類上添加注解
@SpringBootApplication
@MapperScan("com.example.mybatis.mapper")
public class MyBatisApp { public static void main(String[] args) { SpringApplication.run