Spring Boot 与 MyBatis 完美搭配:从基础到实战!
【摘要】 🏆本文收录于「滚雪球学SpringBoot」专栏,手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8 前言 如果你在开发 Java Web 应用时已经开始接触数据库操作,那么你一定听说...

🏆本文收录于「滚雪球学SpringBoot」专栏,手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8
前言
如果你在开发 Java Web 应用时已经开始接触数据库操作,那么你一定听说过 MyBatis。它是一个非常流行的持久层框架,相比于 Hibernate,它更加灵活且不那么抽象,特别适合那些对 SQL 语句有特殊需求的项目。
今天,我们将深入了解 Spring Boot 与 MyBatis 如何搭配使用,来打造一个简单且高效的数据库操作环境。如果你已经对 Spring Boot 和 MyBatis 有了些了解,那就太好了!如果不熟悉也没关系,我会通过简单的例子带你一起探讨。
Spring Boot 可以让我们在开发过程中省去很多繁琐的配置,而 MyBatis 提供了灵活的 SQL 语句配置选项,在这两者的结合下,你可以享受到极大的开发便利性。在这篇文章中,我们不仅会讲解基础知识,还会通过具体的代码实例一步步带你深入了解如何在实际项目中使用 MyBatis。
📚 目录
- 📝 MyBatis 简介与使用
- 🔧 如何配置 MyBatis 与 Spring Boot 集成
- 🗂️ 创建 Mapper 接口与 XML 配置
- 🔍 动态 SQL 与复杂查询
- 🚀 实战案例:如何在 Spring Boot 中使用 MyBatis 完成数据库操作
📝 MyBatis 简介与使用
MyBatis 是一个持久层框架,它通过提供一个映射层,帮助我们将 Java 对象与数据库中的记录进行映射。它的核心理念是“将 SQL 语句映射到 Java 方法”,开发者可以通过 MyBatis 提供的 XML 配置或注解配置来定义数据库操作的细节。
MyBatis 核心组件
-
Mapper 接口:每个数据库操作对应一个接口方法,接口方法通过注解或 XML 绑定到 SQL 语句。Mapper 接口让你能够通过方法调用执行 SQL 语句,极大地简化了数据库操作。
-
SqlSession:是 MyBatis 的核心对象,所有数据库操作都通过它来执行。SqlSession 提供了查询、更新、删除等常用的数据库操作方法。
-
XML 配置文件:MyBatis 提供了 XML 配置文件来管理 SQL 语句的定义和参数映射,可以使得开发者在保持高灵活性的同时避免冗余的代码。
-
注解:除了使用 XML,我们还可以通过注解直接在接口方法上定义 SQL 语句,便于简单场景的操作。
MyBatis 采用了“半自动化”方式,意味着它会将 Java 对象映射到 SQL 语句中,但你依然需要亲自编写 SQL。与 Hibernate 相比,MyBatis 的优势在于其灵活性,尤其适用于那些对 SQL 语句有特殊要求的场景。
🔧 如何配置 MyBatis 与 Spring Boot 集成
Spring Boot 是一个非常流行的 Java 框架,它通过自动化配置极大地简化了 Spring 应用的设置工作。当 MyBatis 与 Spring Boot 集成时,我们可以享受到 Spring Boot 的自动化配置功能,同时 MyBatis 依然提供强大的 SQL 映射功能。
1. 引入依赖
在 pom.xml
文件中添加 MyBatis 和 Spring Boot 的相关依赖,确保项目能够正常加载 MyBatis 组件。
<dependencies>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Starter MyBatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Spring Boot Starter JDBC -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
</dependencies>
这些依赖将允许你在 Spring Boot 项目中集成 MyBatis 和数据库支持。通过 mybatis-spring-boot-starter
依赖,你可以轻松地将 MyBatis 引入项目。
2. 配置数据源
接下来,在 application.properties
或 application.yml
文件中配置数据库连接信息。
# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.maximum-pool-size=10
# MyBatis 配置
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.model
这里我们配置了数据库连接的 URL、用户名、密码以及 MyBatis 的一些基本配置,包括 mapper-locations
和 type-aliases-package
,后者用于指定 MyBatis 自动扫描的类路径。
🗂️ 创建 Mapper 接口与 XML 配置
在 MyBatis 中,Mapper 接口是用来定义数据库操作的地方,每个接口方法对应一个 SQL 语句。Spring Boot 会自动扫描这些接口,并将它们注入到容器中。
1. 创建 Mapper 接口
在 com.example.mapper
包下,创建 UserMapper
接口,并在其中定义查询数据库的方法。
package com.example.mapper;
import com.example.model.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface UserMapper {
// 使用注解的方式,定义 SQL 查询
@Select("SELECT * FROM users WHERE id = #{id}")
User findById(int id);
// 根据用户条件查询
List<User> findAll();
}
这里使用 @Select
注解为 findById
方法定义了 SQL 查询语句,findAll
方法则通过 XML 文件来定义查询。
2. 创建 XML 配置
为了更灵活地配置 SQL,我们可以在 resources/mapper
目录下创建一个与接口同名的 XML 文件,来定义 SQL 语句。
<!-- resources/mapper/UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="findAll" resultType="com.example.model.User">
SELECT * FROM users
</select>
<select id="findById" parameterType="int" resultType="com.example.model.User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
在这个 XML 文件中,我们定义了两个查询:一个用于查询所有用户,另一个用于根据 ID 查询特定用户。resultType
指定了查询结果映射到 User
类。
🔍 动态 SQL 与复杂查询
MyBatis 提供了强大的动态 SQL 支持。通过动态 SQL,我们可以根据传入的参数动态生成 SQL 语句,极大地提高了查询的灵活性。以下是几个常见的动态 SQL 使用示例。
1. <if> 标签:条件判断
<select id="findUsers" resultType="com.example.model.User">
SELECT * FROM users
<where>
<if test="username != null">
AND username = #{username}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
<if>
标签根据参数的值来决定是否将某个条件添加到 SQL 查询中。如果 username
或 age
不为 null
,则将其作为查询条件加入 SQL 中。
2. <choose>、<when> 和 <otherwise> 标签
<select id="findUserByRole" resultType="com.example.model.User">
SELECT * FROM users
<where>
<choose>
<when test="role == 'admin'">
AND role = 'admin'
</when>
<when test="role == 'user'">
AND role = 'user'
</when>
<otherwise>
AND role = 'guest'
</otherwise>
</choose>
</where>
</select>
<choose>
标签类似于 Java 中的 switch
语句,根据不同的条件选择执行不同的 SQL 查询。
🚀 实战案例:如何在 Spring Boot 中使用 MyBatis 完成数据库操作
在本节中,我们将构建一个简单的 Spring Boot 项目,演示如何使用 MyBatis 完成数据库操作。我们将创建一个用户查询功能,并通过不同的查询方式来获取用户数据。
1. 创建实体类
package com.example.model;
public class User {
private int id;
private String username;
private int age;
// Getters and Setters
}
2. 创建 Mapper 接口与 XML
我们创建 UserMapper
接口和 UserMapper.xml
文件,如前文所述。
3. 调用数据库操作
在 Service 层调用 Mapper 接口的方法来进行数据库操作:
package com.example.service;
import com.example.mapper.UserMapper;
import com.example.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById(int id) {
return userMapper.findById(id);
}
public List<User> getAllUsers() {
return userMapper.findAll();
}
}
通过调用 userMapper.findById(id)
和 userMapper.findAll()
方法,我们可以从数据库中获取用户数据。
😎 总结
通过本篇文章的学习,你应该已经掌握了如何将 Spring Boot 与 MyBatis 集成,并且能够通过 Mapper 接口 和 XML 配置 来实现灵活的数据库操作。同时,我们也深入探讨了如何使用 动态 SQL 来构建复杂查询,帮助你在实际项目中处理不同的查询需求。
MyBatis 的魅力在于它灵活而强大的配置方式,它给开发者更高的自由度,适合那些对 SQL 有高度自定义需求的项目。如果你还未尝试过 MyBatis,赶紧动手试试吧!
🧧福利赠与你🧧
无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学SpringBoot」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门SpringBoot,就像滚雪球一样,越滚越大, 无边无际,指数级提升。
最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。
同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。
✨️ Who am I?
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云多年度十佳博主/价值贡献奖,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。

-End-
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)