Spring Boot 2.3 整合 Mybatis-Plus 高级功能
介绍
MyBatis-Plus 是一个 MyBatis 的增强工具,提供了许多实用且方便的功能,比如逆向工程、分页插件、自动填充等等。Spring Boot 2.3 是 Spring 家族中的一员,它提供了快捷而方便的开发方式。
本文将会讲解如何在 Spring Boot 2.3 中整合 Mybatis-Plus,以及如何使用 Mybatis-Plus 中的高级功能,例如分页插件和自动填充。
前置知识
在开始之前,我们先回顾一下一些必要的知识:
- Spring Boot:快速构建 Spring 应用的一款框架。
- MyBatis:一个优秀的持久层框架,支持自定义 SQL、存储过程等。
- MyBatis-Plus:一个 MyBatis 的增强工具,提供了很多优秀实用的功能。
准备工作
我们需要准备以下环境:
- JDK 8 或以上
- Maven 3.0 或以上
项目搭建
首先,我们创建一个 Spring Boot 的项目。这里我们使用 Maven 构建。
在 pom.xml 中添加以下依赖:
<dependencies>
<!-- Spring Boot 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis 依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<!-- MyBatis-Plus 依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<!-- H2 数据库依赖 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
</dependencies>
接着,我们需要创建一个 User 实体类:
@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
// get/set 方法略
}
接下来,我们需要创建一个 UserMapper 接口:
public interface UserMapper extends BaseMapper<User> {
}
注意这里我们让 UserMapper 继承了一个 BaseMapper 类,这是 Mybatis-Plus 提供的一个接口,它包含了许多常用的 SQL 操作方法。
然后,我们需要在 application.yml 中配置 Mybatis 和 Mybatis-Plus:
spring:
datasource:
url: jdbc:h2:mem:test
driver-class-name: org.h2.Driver
username: sa
password:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
这里我们使用 In-Memory 数据库 H2。同时,我们指定了 Mybatis-Plus 的 Mapper 文件所在的路径。
分页插件
Mybatis-Plus 提供了一个优秀的分页插件,我们可以快捷地进行分页操作。
首先,我们需要在 UserMapper.java 中添加一个分页查询方法:
List<User> selectUserPage(Page<User> page, @Param("age") Integer age);
这里我们使用了 Mybatis-Plus 中的 Page 类,它表示分页相关的参数(当前页数、每页条数、总页数、总条数等)。
接下来,在 UserMapper.xml 中实现 selectUserPage 方法的 SQL:
<select id="selectUserPage" resultType="User">
SELECT * FROM user
WHERE age = #{age}
</select>
我们只查询年龄为指定数值的用户。
最后,在 UserService 中使用 selectUserPage 方法进行分页查询:
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public IPage<User> selectUserPage(Page<User> page, Integer age) {
return userMapper.selectUserPage(page, age);
}
}
这里我们使用了 IPage 接口,它是 Mybatis-Plus 中的一个分页接口,实现了分页相关的方法,例如获取当前页码等。
下面是一个完整的分页查询示例:
@GetMapping("/users")
public IPage<User> selectUserPage(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(required = false) Integer age) {
Page<User> page = new Page<>(pageNum, pageSize);
return userService.selectUserPage(page, age);
}
这里我们使用了 @RequestParam 注解,方便接收客户端传来的请求参数。
自动填充
Mybatis-Plus 还提供了一个自动填充功能,它可以在插入或更新数据时自动填充某些字段,解放我们手动填充的工作量。
首先,我们需要一个自动填充的字段,例如创建时间和更新时间。我们可以在 User 实体类中添加两个字段:
@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
private Date createTime;
private Date updateTime;
// get/set 方法略
}
然后,我们需要创建一个自动填充的类,例如 UserMetaObjectHandler:
@Component
public class UserMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.fillStrategy(metaObject, "createTime", new Date());
this.fillStrategy(metaObject, "updateTime", new Date());
}
@Override
public void updateFill(MetaObject metaObject) {
this.fillStrategy(metaObject, "updateTime", new Date());
}
}
注意这里我们让 UserMetaObjectHandler 实现了 MetaObjectHandler 接口,这是 Mybatis-Plus 提供的一个接口,它包含了填充字段的方法。
接下来,我们需要在 UserMapper.java 中开启自动填充:
@Component
public interface UserMapper extends BaseMapper<User> {
}
在这里,我们使用了 @Component 注解,让 UserMapper 被 Spring 容器管理。
最后,在 UserService 中使用 UserMapper 进行插入或更新操作:
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public int insertUser(User user) {
return userMapper.insert(user);
}
public int updateUser(User user) {
return userMapper.updateById(user);
}
}
这里我们使用了 UserMapper 中提供的 insert 和 updateById 方法进行插入或更新操作。
下面是一个完整的自动填充示例:
@PostMapping("/users")
public int insertUser(@RequestBody User user) {
return userService.insertUser(user);
}
@PutMapping("/users")
public int updateUser(@RequestBody User user) {
return userService.updateUser(user);
}
这里我们使用了 @RequestBody 注解,方便接收客户端传来的 user 对象。
总结
至此,我们已经完成了 Spring Boot 2.3 集成 Mybatis-Plus 高级功能的攻略。在本文中,我们使用了两个 Mybatis-Plus 的高级功能,分别是分页插件和自动填充。希望能够对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot2.3 整合mybatis-plus 高级功能(图文详解) - Python技术站