基于mybatis-plus实现分页查询
(一) 配置插件
引入依赖,pom.xml文件
<!-- spring xml 方式 -->
<property name="plugins">
<array>
<bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor">
<property name="sqlParser" ref="自定义解析类、可以没有"/>
<property name="dialectClazz" value="自定义方言类、可以没有"/>
<!-- COUNT SQL 解析.可以没有 -->
<property name="countSqlParser" ref="countSqlParser"/>
</bean>
</array>
</property>
<bean id="countSqlParser" class="com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize">
<!-- 设置为 true 可以优化部分 left join 的sql -->
<property name="optimizeJoin" value="true"/>
</bean>
config配置类
//Spring boot方式
@Configuration
@MapperScan("mapper包名")
public class MybatisPlusConfig {
// 旧版
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
// paginationInterceptor.setOverflow(false);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
// paginationInterceptor.setLimit(500);
// 开启 count 的 join 优化,只针对部分 left join
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
}
// 最新版
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
return interceptor;
}
}
(二)编写返回类
@NoArgsConstructor
@Data
@AllArgsConstructor
public class BackPage<T> {
private static final long serialVersionUID=1L;
/**
* 总页数
*/
private long totalPage;
/**
* 当前页数
*/
private long currentPage;
/**
* 总数
*/
private long totalNum;
/**
* 内容
*/
private List<T> contentList;
}
(三)编写controller层
/**
* 获取所有用户信息
* @return 所有用户信息
*/
@GetMapping("/getAllPages")
public BackPage<Customer> queryCustomerPage(@RequestParam("pageNo") Long pageNo, @RequestParam("pageSize") Long pageSize) {
return adminCustomerService.queryCustomersPage(pageNo, pageSize);
}
(四)编写service层
//根据页码和每页分页数给出分页查询,使用wrapper
public BackPage<Employee> queryEmployeesPage(Long pageNo, Long pageSize) {
BackPage<Employee> EmployeeBackPage = new BackPage<>();
// 设置条件构造器
QueryWrapper<Employee> wrapper = new QueryWrapper<>();
// 构造分页信息,其中的Page<>(page, PAGE_RECORDS_NUM)的第一个参数是第几页,而第二个参数是每页的记录数
Page<Employee> EmployeePage = new Page<>(pageNo, pageSize);
// page(EmployeePage, wrapper)这里的第一个参数就是上面定义了的Page对象,第二个参数就是上面定义的条件构造器对象,通过调用这个方法就可以根据你的分页信息以及查询信息获取分页数据
IPage<Employee> EmployeeIPage = page(EmployeePage, wrapper);
// 封装数据,其中getRecords()是获取记录数,getCurrent()获取当前页数,getPages()获取总页数,getTotal()获取记录总数,还要其他更多的方法,大家可以自行查看,在这里就不过多赘述了
EmployeeBackPage.setContentList(EmployeeIPage.getRecords());
EmployeeBackPage.setCurrentPage(EmployeeIPage.getCurrent());
EmployeeBackPage.setTotalPage(EmployeeIPage.getPages());
EmployeeBackPage.setTotalNum(EmployeeIPage.getTotal());
return EmployeeBackPage;
}
如果还想再加入模糊查询,条件查询,就可以在wrapper的基础上添加了