7.分页

7.1 作用

  • 减少数据处理量,一次数据量太大了对数据库和网络压力太大
SELECT * FROM school.`user` LIMIT startIndex,pageSize
SELECT * FROM school.`user` LIMIT 2  -- 0,2
SELECT * FROM school.`user` LIMIT 2,2 -- startIndex从0开始
  • 使用mybatis实现分页步骤,核心sql

  • 接口

public List<User> selectUserMap(Map<String,Integer> map);
  • mapper.xml
<select id="selectUserMap"  parameterType="map" resultMap="userMap">select * from user limit #{startIndex},#{pageSize}
</select>
  • 测试
@Test
public void testMybatis02(){SqlSession sqlSession = MybatisUtil.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);HashMap<String, Integer> map = new HashMap<>();map.put("startIndex",1);map.put("pageSize",2);List<User> users = mapper.selectUserMap(map);System.out.println(users.size());users.forEach(val->{logger.debug(val.toString());});sqlSession.close();
}

7.2 pagehelper分页插件使用

  • PageHelper首先将前端传递的参数保存到page这个对象中,使用PageHelper.startPage在当前线程上下文中设置一个ThreadLocal变量,将page的副本存放入ThreadLoacl中,在 ThreadLocal中设置了分页参数,接着查询执行的时候,利用了mybatis提供的拦截器,取得ThreadLocal的值,获取当前线程中的分页参数,重新拼装分页SQL,完成分页,查询结束后在 finally 语句中清除ThreadLocal中的查询参数,这样保证分页的时候,sql和参数互不影响,
protected static final ThreadLocal<Page> LOCAL_PAGE = new ThreadLocal<Page>();
/**
* 设置 Page 参数
*
* @param page
*/
protected static void setLocalPage(Page page) {LOCAL_PAGE.set(page);
}/*** 开始分页** @param pageNum      页码* @param pageSize     每页显示数量* @param count        是否进行count查询* @param reasonable   分页合理化,null时用默认配置* @param pageSizeZero true且pageSize=0时返回全部结果,false时分页,null时用默认配置*/public static <E> Page<E> startPage(int pageNum, int pageSize, boolean count, Boolean reasonable, Boolean pageSizeZero) {Page<E> page = new Page<E>(pageNum, pageSize, count);page.setReasonable(reasonable);page.setPageSizeZero(pageSizeZero);//当已经执行过orderBy的时候Page<E> oldPage = getLocalPage();if (oldPage != null && oldPage.isOrderByOnly()) {page.setOrderBy(oldPage.getOrderBy());}setLocalPage(page);return page;}
  • 倒入jar依赖
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.0</version>
</dependency>
  • 在mybatis-config.xml核心配置文件中配置plugins

  • 注意mybatis-config.xml各元素顺序

The content of element type “configuration” must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)

<!--分页插件-->
<plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
  • 在接口interface UserMapper编写方法,注意不传分页参数(物理分页)
List<User> selectUserPagehelper();
  • 在UserMapper.xml编写sql
<select id="selectUserPagehelper" resultType="com.zk.pojo.User">select * from user
</select>
  • 调用测试
@Test
public void testMybatis04(){SqlSession sqlSession = MybatisUtil.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);/*** 开始分页** @param pageNum  页码* @param pageSize 每页显示数量*/PageHelper.startPage(2,2);List<User> users = mapper.selectUserPagehelper();PageInfo<User> userPageInfo = new PageInfo<>(users);//return userPageInfo; System.out.println(userPageInfo.getPageSize());System.out.println(users.size());users.forEach(val->{logger.debug(val.toString());});sqlSession.close();
}
  • 结果

7.3 RowBounds分页插件使用

  • 不是用sql分页实现
  • 实现接口
List<User> selectUserRowBounds();
  • 在UserMapper.xml编写sql
<select id="selectUserPagehelper" resultType="com.zk.pojo.User">select * from user
</select>
  • 调用
@Test
public void testMybatis05(){SqlSession sqlSession = MybatisUtil.getSqlSession();//RowBounds创建RowBounds rowBounds = new RowBounds(1,2);//java代码层面分页List<User> user = sqlSession.selectList("com.zk.dao.UserMapper.selectUserRowBounds",null,rowBounds);System.out.println(user.size());user.forEach(val->{logger.debug(val.toString());});sqlSession.close();
}
  • 结果

本专栏下一篇:MyBatis注解开发

MyBatis分页及分页插件使用相关推荐

  1. Springboot 系列(十二)使用 Mybatis 集成 pagehelper 分页插件和 mapper 插件

    前言 在 Springboot 系列文章第十一篇里(使用 Mybatis(自动生成插件) 访问数据库),实验了 Springboot 结合 Mybatis 以及 Mybatis-generator 生 ...

  2. Mybatis分页功能 pagehelper插件

    Mybatis分页功能 pagehelper插件 创建数据数据 use ssm; create table student (id int auto_incrementprimary key,name ...

  3. Mybatis自定义轻量级分页组件(易集成,易拓展)

    Mybatis自定义轻量级分页组件(易集成,易拓展) 其实github有一个叫做PageHelper的开源分页组件,我也用过,封装的还可以.只是感觉他的量级偏重,其实很多参数,都是我们开发中不需要的参 ...

  4. Mybatis最入门---分页查询(逻辑分页与SQL语句分页)

    [一步是咫尺,一步即天涯] 到目前为止,我们介绍的Mybatis种种查询都是一次性的查询出所有结果并返回给上层.但是,在实际开发过程中,在大量数据存在的情况下,是很少这么做的.本文,我们将从逻辑分页, ...

  5. Mybatis如何实现分页

    Mybatis如何实现分页 关键字limit实现分页 Interceptor Plugin实现分页 首先定一个拦截器,拦截器会拦截所有以ByPage结尾的方法,然后拼接sql 语句的limit关键字实 ...

  6. 【Mybatis】mybatis如何实现分页

    [Mybatis]mybatis如何实现分页 mysql分页功能原理 实现分页必要条件 必须知道某一页从哪里开始到哪里结束 必须知道页面的大小,也就是指定每页要显示多少条数据量 mysql分页的过程 ...

  7. Mybatis使用之分页

    Mybatis使用之分页 一:简介 注:示例基于mysql数据库.Oracle可以自行测试.   使用Mybatis分页主要有两种方式.一种是将分页参数传递到配置文件中.在写sql的时候就做分页.另一 ...

  8. Mybatis如何进行分页的

    Mybatis如何进行分页的 Mybatis是Java应用开发的基础框架,而分页是我们时时都在使用的功能,一般我们可以把分页分为两种: 逻辑分页.先查询出所有的数据缓存到内存里,再根据业务相关的一些需 ...

  9. 高仿淘宝分页:jQuery分页插件kkpager-Array-专题视频课程

    高仿淘宝分页:jQuery分页插件kkpager-503人已学习 课程介绍         天底下万能的分页 课程收益     让所有人不再为分页所苦恼 讲师介绍     Array 更多讲师课程   ...

  10. 前端Vue+ElementUI的Pagination分页组件实现分页展示 后端Spring Boot +Mybatis Plus实现分页接口

    前端Vue+ElementUI的Pagination分页组件实现分页展示 & 后端Spring Boot +Mybatis Plus实现分页接口 很久没有更新博客了,主要原因是博主一直在补充自 ...

最新文章

  1. POJ - 2584 T-Shirt Gumbo 二分多重匹配
  2. 【SSH网上商城项目实战17】购物车基本功能的实现
  3. Mysql基础知识—索引
  4. c++ 四舍五入保留两位小数_Excel中保留小数点位数
  5. C++字符串完全指引之一 —— Win32 字符编码
  6. 图文并茂的带你彻底理解悲观锁与乐观锁
  7. 04_NoSQL数据库之Redis数据库:set类型和zset类型
  8. Boost字符串处理
  9. 主进程退出后子进程还会存在吗?_【干货】Linux进程模型 全解
  10. java实现三个数字的随机组合_JAVA编程实现随机生成指定长度的密码功能【大小写和数字组合】...
  11. 【Linuxamp;Unix--open/close/write/read系统调用】
  12. map分组后取前10个_hive中分组取前N个值的实现
  13. 小一爬取一季度 15646 只基金持仓数据,下半年重点关注这些机会!
  14. 30秒明白tcp的3次握手
  15. Python实现人机中国象棋游戏
  16. 安卓平板python编程软件下载_notepad++下载-notepad++中文版下载v7.6.2 中文增强版-西西软件下载...
  17. 防拷贝U盘在软件开发行业的应用,软件怎样防复制防拷贝?
  18. cs61a笔记-2020fall
  19. python api讲解_集合api讲解_Python C编程视频课程_Python视频-51CTO学院
  20. 皮尔森相关系数_追逐梦想的顾咏丰_新浪博客

热门文章

  1. owncloud php intl,owncloud部署
  2. C++ 写开机启动项的注册表
  3. 【WINDOWS / DOS 批处理】attrib命令详解(一)
  4. BAT批处理文件 attrib命令详解
  5. linux 驱动 include .h 路径 control,linux内核中的MFD子系统
  6. keil MDK ARM7 问题汇总
  7. java7 arm_为Android ARM7编译Mono
  8. Linux基础命令(小白教程,宝妈式教程,有手就会)第一期
  9. 记录让人感动的几个瞬间
  10. 使用WDL执行GATK HaplotypeCaller教程