Spring 集成 MyBatis 为 Java 项目提供了强大的持久层解决方案,同时也是我们使用最多的搭配组合。本文将介绍 Spring 如何集成 MyBatis 设定常用的配置以及实际开发过程中经常使用到的简单样例。
MyBatis 是一个开源的持久化框架,它通过 XML 或注解配置,将对象与数据库表进行映射,简化了数据库操作。
官网
https://mybatis.net.cn/
需要在 pom.xml 中添加 mybatis 的依赖(如果使用 Gradle 的话,则需要添加对应的依赖)
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
※此处的 version 选择了目前最新的版本 3.0.3
在 application.properties 属性文件中,配置 mybatis 的共通设定
mybatis.mapper-locations=classpath*:mapper/**/*.xml
mybatis.configuration.map-underscore-to-camel-case=true
schema.sql
使用程序启动时,默认执行的 schema.sql 来创建 t_user
表
CREATE TABLE IF NOT EXISTS `t_user` (
`id` INTEGER PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(32) NOT NULL,
`age` INTEGER NOT NULL
);
User.java
创建一个实体类,这里跟 t_user
表结构相同
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id;
private String name;
private Integer age;
}
插入多条
UserDao.java
int insertUsers(List<User> users);
UserMapper.xml
<insert id="insertUsers">
insert into t_user (
id,
name,
age
) values
<foreach item="user" collection="users" open="(" separator="),(" close=")">
#{user.id}, #{user.name}, #{user.age}
</foreach>
</insert>
此处,使用了 XML 的方式写的 sql 文
插入单条
UserDao.java
int insertUser(User user);
UserMapper.xml
<insert id="insertUser">
insert into t_user (
id,
name,
age
) values (
#{id},
#{name},
#{age}
)
</insert>
此处,使用了 XML 的方式写的 sql 文
删除
UserDao.java
@Delete("delete from t_user where id = #{id}")
int deleteUser(Integer id);
此处,使用了注解的方式写的 sql 文
更新
UserDao.java
int updateUser(User user);
UserMapper.xml
<update id="updateUser">
update
t_user
set
name = #{name},
age = #{age}
where
id = #{id}
</update>
此处,使用了 XML 的方式写的 sql 文
查询全部
UserDao.java
@Select("select * from t_user")
List<User> selectUsers();
此处,使用了注解的方式写的 sql 文
查询指定ID
UserDao.java
@Select("select * from t_user where id = #{id}")
User selectUser(Integer id);
此处,使用了注解的方式写的 sql 文
插入单条
UserController.java
@GetMapping("insertUser")
public String insertUser() {
User user = User.builder().id(1).name("cheney").age(11).build();
userDao.insertUser(user);
return "登陆了一条用户信息:</br>" + user.toString();
}
网页请求
插入多条
UserController.java
@GetMapping("insertUsers")
public String insertUsers() {
List<User> users = new ArrayList<>();
users.add(User.builder().id(2).name("aaa").age(12).build());
users.add(User.builder().id(3).name("bbb").age(13).build());
userDao.insertUsers(users);
StringBuilder sb = new StringBuilder();
sb.append("登陆了两条用户信息:</br>");
for (User user : users) {
sb.append(user).append("</br>");
}
return sb.toString();
}
网页请求
更新
UserController.java
@GetMapping("updateUser")
public String updateUser() {
User user = User.builder().id(1).name("cheney").age(22).build();
userDao.updateUser(user);
return "修改了用户ID是1的用户信息:</br>" + user.toString();
}
网页请求
查询指定ID
UserController.java
@GetMapping("selectUser")
public String selectUser() {
User user = userDao.selectUser(1);
return "查询用户ID是1的用户信息:</br>" + user.toString();
}
网页请求
删除
UserController.java
@GetMapping("deleteUser")
public String deleteUser() {
userDao.deleteUser(3);
return "删除了用户ID是3的用户信息";
}
网页请求
查询全部
UserController.java
@GetMapping("selectUsers")
public String selectUsers() {
List<User> users = userDao.selectUsers();
StringBuilder sb = new StringBuilder();
sb.append("查询所有数据库中的用户信息:</br>");
for (User user : users) {
sb.append(user).append("</br>");
}
return sb.toString();
}
网页请求
灵活性
允许开发者自定义 SQL 查询语句,更灵活地进行数据库操作
直观的 SQL
SQL 语句直观、可读性强,开发者可以更容易地理解和调试 SQL
轻量级
MyBatis 更注重数据库操作,使得开发者可以更专注于 SQL 和数据层的细节
缓存支持
支持一级缓存和二级缓存,可以提高查询性能,特别是在高并发的情况下
不适合复杂逻辑
对于包含复杂业务逻辑的项目,MyBatis 可能显得不够强大,因为它专注于数据库操作,而不提供全栈解决方案。
需要手动编写 SQL
对于一些开发者而言,需要手动编写 SQL 可能是一项负担。相对于基于对象的框架,这可能增加了一些工作量。
不提供声明式事务
MyBatis 不提供声明式的事务管理,事务需要在代码中显式处理。
灵活性可能导致混乱
MyBatis 的灵活性允许开发者使用任何 SQL 查询语句,但这也可能导致项目中的 SQL 混乱不堪,特别是对于大型团队。
https://github.com/cheney09/spring-practical-combat/tree/main/08/demo
以上就是 Spring 集成 MyBatis 的简要步骤,通过这种集成方式你可以更加便捷地使用 MyBatis 进行数据库操作,希望这篇博客将带你走进 Spring 和 MyBatis 进行持久化层开发。