分页查询

分析:

  • 分析文档要求

  • 查看前端传递给后台的参数

  • 分析参数进行编码

  • 后台返回给前端的数据

思路

浏览器 - > Controller层 - > Service层 - > Mapper层 - > 数据库

设置分页拦截器

@Configuration
public class MybatisPlusConfig { @Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
// 创建MybatisPlusInterceptor拦截器对象
MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
// 添加分页拦截器
mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return mpInterceptor;
}
}

IPage分页对象的常用调用方法

​ IPage内部原理是基于拦截去,拦截的是方法以及方法中的参数,会判断是否查询操作。如果是查询操作,才会进入分页的逻辑处理。进入分页的逻辑处理后,拦截器会通过反射获取该方法的参数进行判断是否存在IPage对象的实体类。如果不存在就不进行分页,存在则将该参数赋值给IPage对象。再进行拼接sql处理完成IPage对象。

void selectPage() {
// 1 为当前页码 2 为每页的记录数
IPage<User> page=new Page<>(1,3);
userDao.selectPage(page,null);
System.out.println("当前页码值:"+page.getCurrent());
System.out.println("每页显示数:"+page.getSize());
System.out.println("一共多少页:"+page.getPages());
System.out.println("一共多少条数据:"+page.getTotal());
System.out.println("数据:"+page.getRecords());
}

流程

Controller层

@RestController
@RequestMapping("/emps")
public class EmpController { @Autowired
private EmpService empService; // @RequestParam使用defaultValue属性设置默认值
// @GetMapping请求映射的地址
@GetMapping
public Result selectLimit(@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer pageSize) {
// 调用业务层进行查询
PageBean pageBean = empService.selectLimit(page, pageSize);
// 返回打包封装后的数据
return Result.success(pageBean);
}
}

Service层

@Service
public class EmpServiceImpl extends ServiceImpl<EmpMapper, Emp> implements EmpService { @Autowired
private EmpMapper empMapper; @Override
public PageBean selectLimit(Integer page, Integer pageSize) {
// 定义Emp实体对象封装操作类
QueryWrapper<Emp> queryWrapper = new QueryWrapper<>();
// 进行分页查询
IPage<Emp> iPage = new Page<>(page, pageSize);
iPage = empMapper.selectPage(iPage, queryWrapper); //封装返回值 返回
return new PageBean(iPage.getTotal(), iPage.getRecords());
}
}

Mapper层

@Mapper
public interface EmpMapper extends BaseMapper<Emp> { }

条件分页查询

Controller 层

  1. 接受参数(分页参数, 查询条件)
  2. 调用service进行条件分页查询, 获取pagebean
  3. 响应
@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController { @Autowired
private EmpService empService; // 此处为了方便测试,不整合
@GetMapping
public Result selectLimit(@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer pageSize,
String name, Short gender,
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
// log.info("数据:{},{},{},{},{},{}", page, pageSize, name, gender, begin, end);
PageBean pageBean = empService.selectLimit(page, pageSize, name, gender, begin, end);
return Result.success(pageBean);
} }

Service 层

LambdaQueryWrapperQueryWrapper 都是 Mybatis Plus 中的查询条件封装类,这里使用的是LambdaQueryWrapper,它和QueryWrapper的区别是列名匹配的是Lambda的语法,偏向于对象,而QueryWrapper列名匹配使用使用的是“数据库中的字段名”

优点: 更加简便的查询语法,避免了SQL注入的风险,避免运行时出现类型错误,编译时能捕获到类型错误

@Service
public class EmpServiceImpl extends ServiceImpl<EmpMapper, Emp> implements EmpService { @Autowired
private EmpMapper empMapper; @Override
public PageBean selectLimit(Integer page, Integer pageSize,
String name, Short gender,
LocalDate begin, LocalDate end) {
// 创建LamdbaQueryWrapper对象
LambdaQueryWrapper<Emp> queryWrapper = new LambdaQueryWrapper<>(Emp.class); // 判断是否为空条件,LambdaQueryWrapper提供的方法添加条件
if(name != null && name != "") {
queryWrapper.like(Emp::getName, name);
} if(gender != null) {
queryWrapper.eq(Emp::getGender, gender);
} if(begin != null)
queryWrapper.eq(Emp::getEntrydate, begin); if(end != null)
queryWrapper.eq(Emp::getCreateTime, end); // 定义分页对象
IPage<Emp> iPage = new Page<>(page, pageSize);
// 根据分页对象执行数据库查询
iPage = empMapper.selectPage(iPage, queryWrapper);
//封装返回值 返回
return new PageBean(iPage.getTotal(), iPage.getRecords());
}
}

借阅:MyBatis-Plus分页插件IPage的使用展示------分页查询_mybatisplus ipage_星域_03zhan的博客-CSDN博客

基于MybatisPlus的简单分页查询和条件分页查询的更多相关文章

  1. JPA分页查询与条件分页查询

    情有独钟的JPA 平时在写一些小项目时,比较喜欢引用 Spring Data Jpa,其实还是图他写代码快~在日常的开发工作中,分页列表查询基本是随处可见,下面一起看一下如何使用 jpa 进行多条件查 ...

  2. MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习

    MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...

  3. 使用ArcGIS API for Silverlight 进行复合多条件空间查询

    原文:使用ArcGIS API for Silverlight 进行复合多条件空间查询 这两天帮网上认识的一个兄弟做了一个查询的示例,多多少少总结一下,在此和大家分享. 为什么说是复合多条件呢?因为进 ...

  4. mysql(单表查询,多表查询,MySQl创建用户和授权,可视化工具Navicat的使用)

    单表查询 语法: 一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT ...

  5. day43 数据库学习 转自egon 老师博客 单表查询和多表查询

    一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键 ...

  6. 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据

    1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...

  7. EasyUi+Spring Data 实现按条件分页查询

    Spring data 介绍 Spring data 出现目的 为了简化.统一 持久层 各种实现技术 API ,所以 spring data 提供一套标准 API 和 不同持久层整合技术实现 . 自己 ...

  8. Node.js、express、mongodb 实现分页查询、条件搜索

    前言 在上一篇Node.js.express.mongodb 入门(基于easyui datagrid增删改查) 的基础上实现了分页查询.带条件搜索. 实现效果 1.列表第一页. 2.列表第二页 3. ...

  9. MVC+Bootstrap+Drapper使用PagedList.Mvc支持多查询条件分页

    前几天做一个小小小项目,使用了MVC+Bootstrap,以前做分页都是异步加载Mvc部分视图的方式,因为这个是小项目,就随便一点.一般的列表页面,少不了有查询条件,下面分享下Drapper+Page ...

  10. JPA实现复杂条件分页查询

    相信熟悉Hibernate的人对于ORM给编程带来的便利于快捷一定不陌生,相对于MyBatis等需要编写复杂的SQL语句,ORM映射为我们带来的便利显而易见.但是,在获得便利的同时,失去的便是灵活性, ...

随机推荐

  1. react this指向问题

    在JSX事件函数方法中的 this,默认不会绑定 this指向.如果你忘记绑定,当你调用这个函数的时候 this 的值为 undefined.所以使用时一定要绑定好this的指向. 构造方法中绑定 c ...

  2. 后端给前端rtmp和flv直播 播放方法

    const suffixal = this.videoObj.videoServer .split('?')[0] .split('.') .pop() var router = this.$rout ...

  3. 根据两个日期之间获取LocalDate日历列表和LocalDate和LocalDateTime数据格式转换

    根据两个日期之间获取LocalDate日历列表和LocalDate和LocalDateTime数据格式转换 package com.example.core.mydemo.localdatetime; ...

  4. Java freemarker生成word模板文件(如合同文件)及转pdf文件方法

    Java freemarker生成word模板文件(如合同文件)及转pdf文件方法创建模板文件ContractTemplate.docx ContractTemplate.xml 导入的Jar包 co ...

  5. 终端读取iOS项目所有设置参数(版本号、应用名等)

    在某些场景下(比如自动化打包等),我们需要从终端来读取到iOS项目的数据,首先先上代码 xcodebuild -showBuildSettings -target 项目target 但有时候我们需要将 ...

  6. 玉炜的iOS开发规范(12.14更新)

    苹果账号篇 1.新建一个新项目之后的bundle ID无论是否定没定,上架的账号如果没定,最好先写一个绝对用不上的名字,因为这个bundle ID一经确定会被绑定在当前你的苹果账号上,如果正好绑定的是 ...

  7. Android 自定义带动画的柱状图

    功能分析 假设要使用柱状图展示用户一周的数据,通用的做法是对接三方图表SDK或者自己通过代码绘制. 1.三方SDK通常包体较大,且定制性差,对特定的UI需求兼容性差; 2.自己绘制,比较复杂,而且要考 ...

  8. SpringBoot+mail 轻松实现各类邮件自动推送

    一.简介 在实际的项目开发过程中,经常需要用到邮件通知功能.例如,通过邮箱注册,邮箱找回密码,邮箱推送报表等等,实际的应用场景非常的多. 早期的时候,为了能实现邮件的自动发送功能,通常会使用 Java ...

  9. OPC 详解 第一篇 基础概念

    一 .概述 OPC 的全称是OPC(OLE for Process Control), 用于过程控制的OLE,OLE(Object Linking and Embedding)大家都知道是对象连接与嵌 ...

  10. InvocationTargetException和UndeclaredThrowableException异常介绍

    今天来介绍了两个陌生又熟悉的异常类,熟悉是因为我们经常会遇到它们,陌生是好像又从来不知道它们是做什么的 假定读者已经清楚了Java的异常分类: 一是程序不能处理的错误(Error), 二是程序应该避免 ...