第一步,在maven中导入mybatis-plus依赖。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
第二步,在application.yml中添加如下配置:
mybatis-plus:
configuration:
#在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
id-type: ASSIGN_ID
第二步,创建mybatis-plus配置类并添加@Configuration注解,然后在MybatisPlusInterceptor拦截器对象中添加分页拦截器,返回对象并注入到bean容器中。
以下是具体代码:
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 添加分页查询拦截器
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
第三步,在controller层接收前端传来的分页信息,包括当前页号(page)、页大小(pageSize)、查询关键字(name)等。根据分页信息创建Page类对象和查询条件构造器LambdaQueryWrapper类对象,然后使用mybatis-plus提供的service层对象中的page(IPage<T> page, Wrapper<T> queryWrapper)
方法,该方法会将查询结果赋值给传入的第一个参数page对象,之后我们就可以直接给前端返回查询结果pageInfo对象。
下面来看代码:
@GetMapping("/page")
public R<Page> page(int page, int pageSize, String name) {
log.info("page: {}, pageSize: {}, name: {}", page,pageSize,name);
// 创建Page类对象
Page<Employee> pageInfo = new Page(page, pageSize);
// 创建查询条件构造器LambdaQueryWrapper类对象
LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
// 根据条件查询
queryWrapper.like(StringUtils.isNotEmpty(name),Employee::getName, name);
queryWrapper.orderByDesc(Employee::getUpdateTime);
// 查询结果返回到pageInfo中的records属性中
employeeService.page(pageInfo, queryWrapper);
// 返回查询结果pageInfo对象给前端
return R.success(pageInfo);
}
这里我们需要注意一下为什么可以直接返回pageInfo这个对象作为结果,我们来查看Page类中的属性以及service层的page方法:
Page类:
public class Page<T> implements IPage<T> {
private static final long serialVersionUID = 8545996863226528798L;
protected List<T> records; // 查询结果
protected long total; // 总页数
protected long size; // 页大小
protected long current; // 当前页
protected List<OrderItem> orders;
protected boolean optimizeCountSql;
protected boolean isSearchCount;
protected boolean hitCount;
protected String countId;
protected Long maxLimit;
}
当执行完service层的page方法后会将查询结果封装到Page类对象中的records属性中。
下面看一下service层page方法是如何实现该操作的:
service层的page方法将调用mapper层的selectPage方法,并且将查询结果封装到IPage对象中返回。
以下是selectPage方法法定义:
IPage<T> selectPage(IPage<T> page, @Nullable Wrapper<T> queryWrapper);
其中,IPage 是 Mybatis-Plus 提供的分页对象接口,T 表示实体类类型,page 参数是分页对象,queryWrapper 参数是查询条件。
调用 selectPage 方法时,需要传入一个分页对象,该对象包含了分页信息(当前页码、每页显示数量等)以及查询结果。同时,还可以传入一个查询条件,用于过滤查询结果。
在执行 selectPage 方法时,Mybatis-Plus 会根据传入的分页对象进行分页查询,并将查询结果封装到分页对象中返回。具体的 SQL 查询语句由 Mybatis-Plus 自动生成,无需手动编写。
以上就是使用mybatis-plus实现分页查询的步骤,实际上我们只需配置分页拦截器并提供分页信息及查询条件,剩下的SQL操作都由mybatis-plus框架帮我们实现好了。