分页查询

分析:

  • 分析文档要求

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

  • 分析参数进行编码

  • 后台返回给前端的数据

思路

浏览器 - > 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. 喜讯!INFINI Easysearch 在墨天轮搜索型数据库排名中荣登榜首

    近日,2023 年 9 月的 墨天轮中国数据库流行度排行 火热出炉,本月共有 287 个数据库参与排名,中国数据库行业竞争日益激烈.其中,极限科技旗下软件产品 INFINI Easysearch 在 ...

  2. 一个常见的 JavaScript 解构陷阱

    在日常的 JavaScript 编码中,我们经常使用解构语法来提取对象中的属性.假设我们有一个名为 fetchResult 的对象,代表从接口返回的数据,其中包含一个字段名为 data. const ...

  3. MyBatis的逆向工程详细步骤操作

    1. MyBatis的逆向工程详细步骤操作 @ 目录 1. MyBatis的逆向工程详细步骤操作 2. 逆向工程配置与生成 2.1 MyBatis3Simple:基础版,只有基本的增删改查 2.1.1 ...

  4. 关于Compilation failed: internal java compiler error的解决方法(Idea)

    关于Compilation failed: internal java compiler error的解决方法(Idea) idea编译项目时出现java: Compilation failed: i ...

  5. Maven配置阿里云镜像和本地仓库路径

    配置阿里云镜像仓库 在settings > mirrors标签下添加以下内容 <!-- Aliyun Mirror --> <mirror> <id>alim ...

  6. python 将查询到数据,处理成包含列名和数据的字典类型数据

    try: self.connect_dbserver() self.cursor.execute(sql) res = self.cursor.fetchall() # 返回的是数组的类型 print ...

  7. Linux常用耗资源命令汇总

    在Linux中,以下命令可能在处理大量数据或复杂操作时比较消耗资源.一般来说,涉及大量数据处理.计算或者I/O操作的命令会比较耗费系统资源. ​ 注意:所有命令资源消耗都是相对的,基于文件的处理量来展 ...

  8. Linux中的inode

    inode是什么 一个文件由两部分组成:元信息和数据. 在Linux中,inode包含文件的元信息,具体来说有以下内容: Size 文件的字节数 Uid 文件拥有者的User ID Gid 文件的Gr ...

  9. P9482 [NOI2023] 字符串

    \(36pts\) \(O(tqn^2)\)暴力即可 \(40pts\) 对于最朴素的暴力优化,从头到尾扫,如果已经当前位字符比出优先级,那么直接能判断了,没必要往后跑了,第15个性质B的也给跑过了, ...

  10. XIP技术与Flash

    XIP技术与Flash 参考: 串行NAND Flash的两大特性导致其在i.MXRT FLASH控制器下无法XiP norflash芯片内执行(XIP) NOR Flash 和 NAND Flash ...