分页查询

分析:

  • 分析文档要求

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

  • 分析参数进行编码

  • 后台返回给前端的数据

思路

浏览器 - > 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. kettle从入门到精通 第三十八课 kettle 分页全量同步(数据量大)

    1.上一课我们学习了在数据量小的情况下的全量同步示例,本次我们一起学习下kettle 分页全量同步. 2.kettle分页全量同步示例依然基于test数据库,从t1表全量同步数据到t2表,由于t1表的 ...

  2. 使用 openssl 从cer公钥证书中导出公钥pem

    使用 openssl 从cer公钥证书中导出公钥pem ---------- "der 公钥证书"转 "base64 公钥证书"openssl x509 -in ...

  3. Django路由层、视图层及模板层

    Django路由层 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表; 你就是以这种方式告诉Django,对于客户端发来的某个UR ...

  4. Spring Data JPA 学习笔记1 - JPA与Spring Data

    标记[跳过]的未来完善 1 理解JPA 1.1 什么是持久化? 当一个软件关闭的时候,软件内储存的状态数据还能在下次开启时被恢复,这就是持久化.对象持久化是指每个独立的对象的生命周期都能不依赖应用程序 ...

  5. 《Android开发卷——自定义日期选择器(二)》

    (小米手机) (中兴手机) 在上一篇中,我介绍了一般公司都会自定义时间日期选择器,并结合自己所做的项目给大家参考. 工作实录之<Android开发卷--自定义日期选择器(一)>链接:htt ...

  6. ThreadLocal 核心源码分析

    ThreadLocal 简介 多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程 ...

  7. .NET使用原生方法实现文件压缩和解压

    前言 在.NET中实现文件或文件目录压缩和解压可以通过多种方式来完成,包括使用原生方法(System.IO.Compression命名空间中的类)和第三方库(如:SharpZipLib.SharpCo ...

  8. MATLAB神经网络工具箱使用介绍

      本文介绍MATLAB软件中神经网络拟合(Neural Net Fitting)工具箱的具体使用方法.   在MATLAB人工神经网络ANN代码这篇文章中,我们介绍了MATLAB软件中神经网络(AN ...

  9. 高通mm-camera平台 Camera移植

    高通Cam-X平台 Camera移植 注:此文档以在高通8916平台移植OV5648为例,给大家讲解Android SOC的底层Camera. Reference: https://blog.csdn ...

  10. 基于OMAPL138+FPGA核心板——MCSDK开发入门(下)

    本文测试板卡为创龙科技 SOM-TL138F 是一款基于 TI OMAP-L138(定点/浮点 DSP C674x + ARM9)+ 紫光同创 Logos/Xilinx Spartan-6 低功耗 F ...