Mybatis实现分页查询的详细流程

 更新时间:2023年08月21日 08:42:04   作者:章鱼小丸子duduu  
这篇文章主要给大家介绍了关于Mybatis实现分页查询的详细流程,MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架,需要的朋友可以参考下

一. 简单分页查询——limit

使用select查询时,如果结果集数据量较大,一个页面难以处理,就会采用分页查询。

分页查询,就是从结果集中拿出指定的第n页到第m页的数据来显示。

// limit分页公式 
// currentPage:当前页 
// pageSize:每页记录数
limit (currentPage-1) * pageSize,pageSize

// SQL语句
select * from student limit(currentPage-1)*pageSize,pageSize;

1. 基于注解的简单分页查询

【Mapper接口】

@select("select * from student limit #{pageBegin},#{pageSize}")
List<Student> findByPage(@Param("pageBegin") Integer PageBegin,@Param("PageSize")Integer PageSize);

【Controller类·】

@GetMapping("/findByPage")
public List<Student> findByPage(Integer page,Integer pageSize){
    Integer pageBegin = (page-1) * pageSize;
    return StudentMapper.findByPage(pageBegin,pageSize);
}

二.基于mapper.xml的复杂分页

1. 【定义Page类——封装分页结果】

/**
 * 分页结果封装对象
 */
@AllArgsConstructor
@NoArgsConstructor
@Data
public class PageResult implements Serializable{
    private Long total;//总记录数
    private List rows;//当前页结果
}

2.【定义PageResult类——封装查询条件】

封装查询条件
 请求参数包括页码、每页显示记录数、查询条件。
 请求参数的json格式为:{currentPage:1,pageSize:10,queryString:''apesource''}

// 分页请求。
@AllArgsConstructor
@NoArgsConstructor
@Data
public class QueryPageBean implements Serializable{
    private Integer currentPage;//当前页码
    private Integer pageSize;//每页记录数
    private String queryString;//查询条件
    public QueryPageBean(Integer currentPage, Integer pageSize) {
        this.currentPage = currentPage;
        this.pageSize = pageSize;
    }
}

3.【Dao层】

/*** 持久层Dao接口 */
@Mapper
public interface CheckGroupDao {
    public Page<CheckGroup> selectByCondition(String queryString);
}

4.【xxxMapper.xml映射文件】

<!--动态查询:分页查询-->
    <select id="selectByCondition" parameterType="string" resultType="com.apesource.graduation_project.pojo.CheckGroup">
        select * from t_checkgroup
        <if test="value != null and value.length > 0">
            where code = #{value} or name = #{value} or helpCode = #{value}
        </if>
    </select>

5.【Service层】

@Override
    public PageResult pageQuery(Integer currentPage, Integer pageSize, String queryString)                     {
        PageHelper.startPage(currentPage, pageSize);
        Page<CheckGroup> page = checkGroupDao.selectByCondition(queryString);
        return new PageResult(page.getTotal(), page.getResult());
    }

6. 【Controller层】

 //分页查询
    @PostMapping("/findPage")
    public PageResult findPage(@RequestBody QueryPageBean queryPageBean) {
        try {
            PageResult pageResult = checkGroupService.pageQuery(queryPageBean.getCurrentPage(),queryPageBean.getPageSize(),queryPageBean.getQueryString());
            return pageResult;
        } catch (Exception e) {
            return null;
        }
    }

总结 

到此这篇关于Mybatis实现分页查询的文章就介绍到这了,更多相关Mybatis分页查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实现在Word指定位置插入分页符

    Java实现在Word指定位置插入分页符

    在Word插入分页符可以在指定段落后插入,也可以在特定文本位置处插入。本文将以Java代码来操作以上两种文档分页需求,需要的可以参考一下
    2022-04-04
  • 解决@Validated对List对象验证失效问题

    解决@Validated对List对象验证失效问题

    文章指出@Validated注解无法验证List数组参数,建议手动逐项验证或封装List为对象进行验证,前者代码冗余但直接,后者需调整JSON结构但更简洁,根据需求选择方案,权衡灵活性与参数改造成本
    2025-09-09
  • 解析rainbond以应用为中心的架构设计原理

    解析rainbond以应用为中心的架构设计原理

    这篇文章主要为大家介绍了rainbond以应用为中心的架构设计实现及原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-02-02
  • SpringBoot结合SpringCloud的分布式系统搭建教程

    SpringBoot结合SpringCloud的分布式系统搭建教程

    本文介绍了如何使用SpringBoot和SpringCloud搭建一个分布式系统,包括服务注册与发现、配置中心、网关服务、负载均衡和断路器等组件的使用,通过搭建和测试这个分布式系统,技术人员可以深入理解微服务架构的设计与实现
    2025-12-12
  • SpringMVC请求的路径变量里面写正则表达式的方法

    SpringMVC请求的路径变量里面写正则表达式的方法

    这篇文章主要介绍了SpringMVC请求的路径变量里面写正则表达式的相关知识,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • 6种Java创建对象的方式总结

    6种Java创建对象的方式总结

    在Java中,创建对象可以使用多种方式,本文将详细介绍以下六种创建对象的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-04-04
  • spring关于组件的注入及获取流程场景分析

    spring关于组件的注入及获取流程场景分析

    这篇文章主要介绍了spring关于组件的注入及获取流程场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-07-07
  • 深入了解Spring中最常用的11个扩展点

    深入了解Spring中最常用的11个扩展点

    我们一说到spring,可能第一个想到的是 IOC(控制反转) 和 AOP(面向切面编程)。除此之外,我们在使用spring的过程中,有没有发现它的扩展能力非常强。今天就来跟大家一起聊聊,在Spring中最常用的11个扩展点
    2022-09-09
  • 关于Java应用日志与Jaeger的trace关联的问题

    关于Java应用日志与Jaeger的trace关联的问题

    这篇文章主要介绍了Java应用日志如何与Jaeger的trace关联,通过jaeger发现这十次请求中有一次耗时特别长,想定位一下具体原因,感兴趣的朋友跟随小编一起看看吧
    2022-01-01
  • 一文详解MQ消息丢失问题的5种解决方案

    一文详解MQ消息丢失问题的5种解决方案

    有些小伙伴在工作中,一提到消息队列就觉得很简单,但真正遇到线上消息丢失时,排查起来却让人抓狂,今天这篇文章,专门跟大家一起聊聊这个话题,希望对你会有所帮助
    2025-10-10

最新评论