后端项目开发:分页功能的实现(Mybatis+pagehelper)

分页查询是项目中的常用功能,此处我们基于Mybatis对分页查询进行处理。

引入分页依赖

xml 复制代码
<!-- pagehelper -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.13</version>
</dependency>

1.分页请求封装

java 复制代码
public class PageRequest {
    /**
     * 当前页码
     */
    private int pageNum = 1;
    /**
     * 每页数量
     */
    private int pageSize = 10;
    /**
     * 查询参数
     */
    private Map<String, Object> params = new HashMap<>();
	//getter setter
}

2.分页结果封装

在http目录下,新建PageResult类,我们用此类包装分页结果。

java 复制代码
/**
 * 分页数据封装类
 */
@Getter
@Setter
public class PageResult {
    /**
     * 当前页码
     */
    private int pageNum;
    /**
     * 每页数量
     */
    private int pageSize;
    /**
     * 记录总数
     */
    private long totalSize;
    /**
     * 页码总数
     */
    private int totalPages;
    /**
     * 分页数据
     */
    private List<?> content;
    //getter setter
}

3.分页助手封装

java 复制代码
public class MybatisPageHelper {

    public static final String findPage = "findPage";

    /**
     * 分页查询, 约定查询方法名为 "findPage"
     * @param pageRequest 分页请求
     * @param mapper Dao对象,MyBatis的 Mapper
     * @return
     */
    public static PageResult findPage(PageRequest pageRequest, Object mapper) {
        return findPage(pageRequest, mapper, findPage);
    }

    /**
     * 调用分页插件进行分页查询
     * @param pageRequest 分页请求
     * @param mapper Dao对象,MyBatis的 Mapper
     * @param queryMethodName 要分页的查询方法名
     * @param args 方法参数
     * @return
     */
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public static PageResult findPage(PageRequest pageRequest, Object mapper, String queryMethodName, Object... args) {
        // 设置分页参数
        int pageNum = pageRequest.getPageNum();
        int pageSize = pageRequest.getPageSize();
        PageHelper.startPage(pageNum, pageSize);
        // 利用反射调用查询方法
        Object result = ReflectionUtils.invoke(mapper, queryMethodName, args);
        return getPageResult(pageRequest, new PageInfo((List) result));
    }

    /**
     * 将分页信息封装到统一的接口
     * @param pageRequest
     * @return
     */
    private static PageResult getPageResult(PageRequest pageRequest, PageInfo<?> pageInfo) {
        PageResult pageResult = new PageResult();
        BeanUtils.copyProperties(pageInfo,pageResult);
        return pageResult;
    }
}
相关推荐
冯诺一没有曼10 小时前
Java记账系统项目实战 | Spring Boot + MyBatis Plus + Layui 前后端整合开发
java·spring boot·mybatis
Code哈哈笑13 小时前
【Spring Boot基础】MyBatis的基础操作:日志、增删查改、列名和属性名匹配 -- 注解实现
java·spring boot·后端·spring·mybatis
Minyy1113 小时前
SSM(SpringMVC+spring+mybatis)整合的步骤以及相关依赖
java·后端·spring·servlet·maven·intellij-idea·mybatis
隔壁小查1 天前
【后端开发】MyBatis
mybatis
Minyy111 天前
使用注解方式整合ssm时,启动tomcat扫描不到resource下面的xxxmapper.xml问题,解决方法
java·spring boot·spring·apache·mybatis
A阳俊yi2 天前
整合SSM——(SpringMVC+Spring+Mybatis)
java·spring·mybatis
岁岁岁平安2 天前
基于SpringBoot3实现MyBatis-Plus(SSMP)整合快速入门CURD(增删改查)
java·spring boot·spring·java-ee·mvc·mybatis·mybatis-plus
字节王德发2 天前
MyBatis如何配置数据库连接并实现交互?
数据库·mybatis·交互
bing_1582 天前
Spring Boot 微服务中集成 MyBatis-Plus 与集成原生 MyBatis 有哪些配置上的不同?
spring boot·微服务·mybatis
江沉晚呤时2 天前
从零开始学习 Lucene.Net:.NET Core 中的全文搜索与索引管理
开发语言·c#·.net·mybatis·.netcore·lucene