赞
踩
温故而知新,这里记录一下
分页查询每个人程序猿几乎都使用过,但是有部分同学不懂什么是物理分页和逻辑分页。
相当于执行了limit分页语句,返回部分数据。物理分页只返回部分数据占用内存小,能够获取数据库最新的状态,实施性比较强,一般适用于数据量比较大,数据更新比较频繁的场景。
一次性把全部的数据取出来,通过程序进行筛选数据。如果数据量大的情况下会消耗大量的内存,由于逻辑分页只需要读取数据库一次,不能获取数据库最新状态,实施性比较差,适用于数据量小,数据稳定的场合。
常用的分页组件有MybatisPageHelper等,分页原理为先执行原SQL+limit语句,再执行select count(*) from xxx where xxx语句。
一共执行了两次,进行了两次数据的筛选和过滤。
创建MybatisPlusConfig配置类,需要配置分页插件,小编使用的Spring boot配置方式。
- /**
- * @Auther: IT贱男
- * @Date: 2019/6/12 15:06
- * @Description: MybatisPlus配置类
- */
- @Configuration
- public class MyBatisPlusConfig {
-
- /**
- * 分页插件
- * @return
- */
- @Bean
- public PaginationInterceptor paginationInterceptor() {
- return new PaginationInterceptor();
- }
- }
MP的Wrapper提供了两种分页查询的方式,源码如下:
- /**
- * 根据 entity 条件,查询全部记录(并翻页)
- *
- * @param page 分页查询条件(可以为 RowBounds.DEFAULT)
- * @param queryWrapper 实体对象封装操作类(可以为 null)
- */
- IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
-
- /**
- * 根据 Wrapper 条件,查询全部记录(并翻页)
- *
- * @param page 分页查询条件
- * @param queryWrapper 实体对象封装操作类
- */
- IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
可见两个分页方法参数都是一致的,只是返回参数略有不同,具体选择根据实际业务为准。
- /**
- * 分页查询
- */
- @Test
- public void selectByPage() {
- QueryWrapper<User> wrapper = new QueryWrapper();
- wrapper.like("name", "雨").lt("age", 40);
-
- Page<User> page = new Page<>(1,2);
-
- //IPage<User> userIPage = userMapper.selectPage(page, wrapper);
-
- IPage<Map<String, Object>> mapIPage = userMapper.selectMapsPage(page, wrapper);
-
-
- System.out.println("总页数"+mapIPage.getPages());
- System.out.println("总记录数"+mapIPage.getTotal());
- List<Map<String, Object>> records = mapIPage.getRecords();
- records.forEach(System.out::println);
- }
以上分页查询执行sql如下,先是查询了一次总记录数,然后在查询的数据。
- DEBUG==> Preparing: SELECT COUNT(1) FROM user WHERE name LIKE ? AND age < ?
- DEBUG==> Parameters: %雨%(String), 40(Integer)
- TRACE<== Columns: COUNT(1)
- TRACE<== Row: 2
- DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age < ? LIMIT ?,?
- DEBUG==> Parameters: %雨%(String), 40(Integer), 0(Long), 2(Long)
- TRACE<== Columns: id, name, age, email, manager_id, create_time
- TRACE<== Row: 2, 张雨琪, 31, zjq@baomidou.com, 1088248166370832385, 2019-01-14 09:15:15
- TRACE<== Row: 3, 刘红雨, 31, lhm@baomidou.com, 1088248166370832385, 2019-01-14 09:48:16
- DEBUG<== Total: 2
- 总页数1
- 总记录数2
可以看出,质量量两条查询语句:
1 2 3 4 5 6 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。