48、Spring Boot 详细讲义(五)
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