当前位置: 首页 > news >正文

MyBatis常用的俩种分页方式

1、使用 limit 实现分页

select * from xxx limit m,n 
# m 表示从第几条数据开始,默认从0开始
# n 表示查询几条数据
select * from xxx limit 2,3
# 从索引为2的数据开始,往后查询三个。2、3、4

(1) 创建分页对象,用来封装分页的数据

PS:我使用了Lombok插件,或者直接生成set、get、toString也一样。

/**** Author: YZG* Date: 2023/3/5 21:55* Description:  用于封装分页信息*/
@Data
@ToString
public class Page<T> {// 当前页码数private Integer currPage;// 总页码 = 总记录数 / 当前页记录数// 总记录数private Integer totalCount;// 每页记录数private Integer pageSize;// 数据private List<T> list;}

(1)提供俩个方法

    /** 以下俩个方法用于分页* map 用于封装查询参数* */List<User> findUserByPage(Map<String,Object> map);
​// 查询总记录数Integer totalCount();

mapper 映射文件:

    <!--分页查询--><select id="findUserByPage" resultType="com.example.mptest.entity.User">select  * from user limit #{start},#{pageSize}</select><select id="totalCount" resultType="java.lang.Integer">select count(*) from user</select>

(2)提供分页方法

  /*** @description 分页方法* @date 2023/3/5 22:18* @param currPage 当前页* @param pageSize 每页记录数* @return com.example.mptest.entity.Page<com.example.mptest.entity.User>*/public Page<User> findUserByPage(int currPage, int pageSize) {// 创建分页对象Page<User> page = new Page<>();HashMap<String, Object> params = new HashMap<>();// 起始查询数据索引。// 比如:查询第二页,每页5条数据. (2-1) * 5 = 5, 查询的数据索引为: 5,6,7,8,9params.put("start", (currPage - 1) * pageSize);params.put("pageSize", pageSize);// 每页的数据List<User> list = userMapper.findUserByPage(params);// 查询总记录数int totalCount = userMapper.count();
​// 封装分页信息返回page.setCurrPage(currPage);page.setPageSize(pageSize);page.setList(list);page.setTotalCount(totalCount);return  page;}

2、使用 pagehelper 插件

(1)引入依赖

        <!--分页功能的依赖--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version></dependency>

(2)配置分页拦截器

PS:由于我使用的SpringBoot,直接向容器中注入即可。

@Configuration
public class MyBatisConfig {
​@Beanpublic PageInterceptor pageInterceptor(){return new PageInterceptor();}
}

或者在spring配置文件中配置:

    <!--分页插件-->
<plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

(3)测试

    @Testpublic void testPage() {
​// pageNum:当前页码  pageSize:每页记录数PageHelper.startPage(1,3);// 查询所有数据List<User> list = userMapper.findAll();// 第一个参数:需要分页的数据// 第二个参数:导航分页的页码数。也就是显示多少页PageInfo<User> pageInfo = new PageInfo<>(list,3);// pageInfo 里保存了分页的所有信息System.out.println(pageInfo);}
关于PageInfo里面的属性说明
pageNum : 当前页码pageSize : 每页显示条数size : 当前页显示的真实条数total :总记录数pages:总页数prePage:上一页的页码nextPage : 下一页的页码isFirstPage/isLastPage:是否为第一页/最后一个hasPreviousPage/hasNextPage:是否有上一页/下一页navigatePage : 导航分页的页码数navigatePageNums : 导航分页显示的页码数 [1,2,3,4,5]

http://www.lryc.cn/news/30640.html

相关文章:

  • RPC通信原理解析
  • 【蓝桥杯集训·周赛】AcWing 第93场周赛
  • 蓝桥杯-刷题统计
  • Linux入门教程||Linux Shell 变量|| Shell 传递参数
  • [算法和数据结构]--回溯算法之DFS初识
  • 【LeetCode每日一题】——680.验证回文串 II
  • 【C语言进阶:指针的进阶】你真分得清sizeof和strlen?
  • 【前端必看】极大提高开发效率的网页 JS 调试技巧
  • 【春招面经】视源股份前端一面
  • 插件化开发入门
  • tftp、nfs 服务器环境搭建
  • 汇编系列03-不借助操作系统输出Hello World
  • TPU编程竞赛系列|算能赛道冠军SO-FAST团队获第十届CCF BDCI总决赛特等奖!
  • 【C++】AVL树,平衡二叉树详细解析
  • C/C++开发,无可避免的多线程(篇四).线程与函数的奇妙碰撞
  • elisp简单实例: taglist
  • Azure AI基础到实战(C#2022)-认知服务(3)
  • aws apigateway 使用restapi集成lambda
  • HTML基础
  • ThreadPoolExecutor参数 keepAliveTime allowCoreThreadTimeOut
  • 什么是Hibernate框架?
  • 指针面试笔试题练习
  • docker(三)仓库的搭建、官方私有仓库的加密和认证
  • FPGA实现SDI视频编解码 SDI接收发送,提供2套工程源码和技术支持
  • Android 基础知识4-3.5 RadioButton(单选按钮)Checkbox(复选框)详解
  • 用代码实现解析解的方式求解_梯度下降法思路_导函数有什么用_接23节---人工智能工作笔记0026
  • 大数据ETL开发之图解Kettle工具
  • docker-容器数据卷
  • 【C++】类和对象补充知识点
  • 路径规划-人工势场法