后端项目开发:分页功能的实现(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;
    }
}
相关推荐
csdn2015_3 小时前
springboot +mybatis 查询myql开启程序级别缓存
spring boot·缓存·mybatis
C++、Java和Python的菜鸟1 天前
第1章 项目前置课-Mybatis-Plus
mybatis
jaysee-sjc1 天前
【JavaWeb】Tlias智能学习辅助系统|后端Web实战(登录认证)
java·开发语言·前端·学习·mybatis
步行cgn1 天前
MyBatis 动态 SQL 完全指南
sql·tomcat·mybatis
步行cgn2 天前
错误:Invalid bound statement (not found) 详解与解决方案
mybatis
sugar__salt2 天前
MyBatis-Plus 从入门到实战:高效简化数据库开发的完整指南
数据库·spring boot·mybatis·数据库开发
bbq粉刷匠3 天前
手写 SQL 被一次 mvn generate 抹掉之后:我用一个 extension/ 子目录躲开 MyBatis 两个坑
数据库·sql·mybatis
ChaHae-In3 天前
MyBatis入门操作
java·mybatis
sugar__salt3 天前
MyBatis ③动态 SQL 完全指南 —— 从条件拼接到批量操作
java·sql·mybatis
元界metalite4 天前
MyBatis多数据源常见难题-事务开始了为何数据源还没选出来
后端·mybatis