mybatis-plus分页查询

news/2024/4/26 12:09:04/文章来源:https://blog.csdn.net/lln1540295459/article/details/129235125

内置的分页方法

内置方法
在Mybatis-Plus的BaseMapper中,已经内置了2个支持分页的方法:

/*** 根据 entity 条件,查询全部记录(并翻页)** @param page         分页查询条件(可以为 RowBounds.DEFAULT)* @param queryWrapper 实体对象封装操作类(可以为 null)*/
<E extends IPage<T>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 根据 Wrapper 条件,查询全部记录(并翻页)** @param page         分页查询条件* @param queryWrapper 实体对象封装操作类*/
<E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

使用的话要配置,还没用到,用到了再说

package com.xxxx.mybatisplus.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
//扫描接口所在的包
@MapperScan("com.xxxx.mybatisplus.mapper")//可以将主类的注解移动到此处
public class MyBatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}}
    @Testpublic void testPageCondition(){//查询用户名包含a,年龄在20-30之间,邮箱信息不为null的用户信息QueryWrapper<User> queryWrapper = new QueryWrapper();//字段名,queryWrapper.between("age",20,30).isNotNull("email");//设置分页参数Page<User> page = new Page<>(3,5);userMapper.selectPage(page,queryWrapper);//获取分页数据List<User> list = page.getRecords();list.forEach(System.out::println);System.out.println("当前页:"+page.getCurrent());System.out.println("每页显示的条数:"+page.getSize());System.out.println("总记录数:"+page.getTotal());System.out.println("总页数:"+page.getPages());System.out.println("是否有上一页:"+page.hasPrevious());System.out.println("是否有下一页:"+page.hasNext());}

分页原理

mybatis-plus分页查询的实现原理:
1、由分页拦截器PaginationInnerInterceptor拦截所有查询请求,在执行查询前判断参数中是否包含IPage类型的参数。
2、如果包含IPage类型的参数,则根据分页信息,重新组装成分页查询的SQL。

自定义分页

搞清楚mybatis-plus中分页查询的原理,我们来自定义分页查询方法。

我使用的是mybatis-plus 3.5.2的版本。

  <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency>

Page对象即作为参数,也作为查询结果接收体

ActivityMeetingPageQueryDTO extends Query

@Data
@ApiModel(value = "ActivityMeetingPageQueryDTO对象", description = "分页查询入参")
public class ActivityMeetingPageQueryDTO extends Query implements Serializable {private static final long serialVersionUID = 1L;......
}

controller

    @ApiOperation(value = "分页查询谈心谈话")@PostMapping("/pageQuery")public R pageQuery(@RequestBody ActivityMeetingPageQueryDTO meetingPageQueryDTO) {Page<ActivityTalkVO> page = new Page<>(meetingPageQueryDTO.getCurrent(), meetingPageQueryDTO.getSize());List<ActivityTalkVO> resultList = activityTalkService.select(page,meetingPageQueryDTO);page.setRecords(resultList);return R.data(page);}

service

    List<ActivityTalkVO> select(Page<ActivityTalkVO> page, ActivityMeetingPageQueryDTO meetingPageQueryDTO);

serviceImpl

    @Overridepublic List<ActivityTalkVO> select(Page<ActivityTalkVO> page, ActivityMeetingPageQueryDTO meetingPageQueryDTO) {meetingPageQueryDTO.setTenantId(AuthUtil.getTenantId());List<ActivityTalkVO> list =activityTalkMapper.select(page,meetingPageQueryDTO);list.forEach(item->{if(item.getTalkObject()!=null && !Objects.equals(item.getTalkObject(), ""))item.setTalkObject(DisplayNameUtils.toFormatDisplay(item.getTalkObject()));});return list;}

mapper

    List<ActivityTalkVO> select(Page<ActivityTalkVO> page, @Param("query") ActivityMeetingPageQueryDTO meetingPageQueryDTO);

Page作为参数,用新的IPage对象接收查询结果

controller

    @GetMapping("/list")@ApiOperation(value = "分页条件查询党组织信息列表", notes = "后台默认传递的是根党组织的ancestors和orgId, 列表显示根党组织下一级的全部组织, 要显示哪一个党组织则需要传递相应的ancestors和orgId; " +"orgName和orgType是查询条件")@TenantIgnorepublic R<IPage<OrgListVO>> lowOrgList(String ancestors, Long orgId,String orgName, String orgType, Query query) {IPage<OrgListVO> pages = partyOrgManageService.lowOrgList(Condition.getPage(query),ancestors,orgId,orgName,orgType);return R.data(pages);}

service

    //下级党组织列表IPage<OrgListVO> lowOrgList(IPage<Object> page,String ancestors, Long orgId, String orgName, String orgType);

serviceImpl

    @Overridepublic IPage<OrgListVO> lowOrgList(IPage<Object> page,  String ancestors, Long orgId,String orgName, String orgType) {return partyOrgManageMapper.lowOrgList(page,ancestors,orgId,orgName,orgType);}

mapper

    IPage<OrgListVO> lowOrgList(IPage<Object> page, String ancestors, Long orgId, String orgName, String orgType);

分页插件PageHelper

很多人已经习惯了在mybatis框架下使用PageHelper进行分页查询,在mybatis-plus框架下依然也可以使用,和mybatis-plus框架自带的分页插件没有明显的高下之分。

个人认为mybatis-plus的分页实现可以从方法命名、方法传参方面更好的规整代码。而PageHelper的实现对代码的侵入性更强,不符合单一指责原则。

推荐在同一个项目中,只选用一种分页方式,统一代码风格。

PageHelper的使用:

1.引入maven依赖

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>最新版本</version>
</dependency>

2.PageHelper分页查询
代码如下(示例):

//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectAll();
//用PageInfo对结果进行包装
PageInfo page = new PageInfo(list);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_74817.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#多窗口切换

多窗口切换【功能目标】1、实现多窗口切换&#xff08;Panel&#xff09;2、动态生成窗口内文本框以及标签&#xff08;重点&#xff09;3、改变文本框内容【效果图】【代码详解】1、多窗口切换如要实现多窗口切换&#xff0c;需要用到Panel&#xff0c;对于这个控件不熟悉的可…

13-mvc框架原理与实现方式

1、mvc原理 # mvc 与框架## 1.mvc 是什么1. m:model,模型(即数据来源),主要是针对数据库操作 2. v:view,视图,html 页面。视图由一个一个模板构成(模板是视图的一个具体展现或载体,视图是模板的一个抽象) 3. c:controller,控制器,用于mv之间的数据交互## 2.最简单的 mvc 就是一…

锁相环的组成和原理及应用

一.锁相环的基本组成 许多电子设备要正常工作&#xff0c;通常需要外部的输入信号与内部的振荡信号同步&#xff0c;利用锁相环路就可以实现这个目的。 锁相环路是一种反馈控制电路&#xff0c;简称锁相环(PLL)。锁相环的特点是&#xff1a;利用外部输入的参考信号控制环路内…

阶段八:服务框架高级(第五章:服务异步通信-高级篇(RabbitMQ高级))

阶段八&#xff1a;服务框架高级&#xff08;第五章&#xff1a;服务异步通信-高级篇&#xff08;RabbitMQ高级&#xff09;&#xff09;Day-第五章&#xff1a;服务异步通信-高级篇&#xff08;RabbitMQ高级&#xff09;0.学习目标1.消息可靠性1.1.生产者消息确认1.1.1.修改配…

400G光模块知识大全

400G光模块是目前高速传输领域中的一种先进产品&#xff0c;被广泛应用于高性能数据中心、通信网络、大规模计算、云计算等领域。本文将从400G光模块的定义、技术、产品型号、应用场景以及未来发展方向进行详细介绍。一、什么是400G光模块&#xff1f;400G光模块是指传输速率达…

Android zygote进程启动流程

zygote启动过程中涉及到以下模块&#xff1a; app_processzygote USAPsocketFileDescriptor (FD) AndroidRuntimeAppRuntime &#xff08;定义于app_process模块&#xff0c;继承自AndroidRuntime。&#xff09; init进程启动zygote进程&#xff1a; #init.zygote32_64.rc s…

前端开发_快应用开发

目录快应用官网真机调试组件组件嵌套问题tab组件list组件web组件css 样式问题[1]选择器[2]盒模型[3]样式布局-弹性布局[4-1]样式切换 - 类名的动态切换[4-2] 样式切换 - 行内样式动态切换[5]background[6]overflow[7]border-radius[8]盒子阴影[9] 单位系统接口[1] 检查某app是否…

redis五种数据结构

redis五种数据结构1. redis 其他相关1.1 redis 的安装1.2 redis 的持久化1.3 redis 配置文件2. redis 常见命令2.1 key2.2 设置 key 的生存时间或过期时间3. redis的5种常见的数据结构3.1 String3.2 list3.3 hash3.4 set3.5 zset&#xff08;SortedSet&#xff08;有序集合&…

2023年“网络安全”赛项浙江省金华市选拔赛 任务书

2023年“网络安全”赛项浙江省金华市选拔赛 任务书 任务书 一、竞赛时间 共计3小时。 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段单兵模式系统渗透测试 任务一 Windows操作系统渗透测试 任务二 Linux操作系统渗透测试 任务三 网页渗透 任务四 Linux系统…

《爆肝整理》保姆级系列教程python接口自动化(二十四)--unittest断言——中(详解)

简介 上一篇通过简单的案例给小伙伴们介绍了一下unittest断言&#xff0c;这篇我们将通过结合和围绕实际的工作来进行unittest的断言。这里以获取城市天气预报的接口为例&#xff0c;设计了 2 个用例&#xff0c;一个是查询北京的天气&#xff0c;一个是查询 南京为例&#xf…

继电器的工作原理、构成和功能介绍

随着电力应用的不断发展&#xff0c;电气设备已经深入到我们的日常生活中&#xff0c;电气自动化技术大量使用在电力系统和生产型企业中&#xff0c;人们在享受电带来方便的同时要注意用电保护。继电器就是为了保护电路而生的&#xff0c;可以提高电路可靠性&#xff0c;保障用…

RabbitMQ实现死信队列

目录死信队列是什么怎样实现一个死信队列说明实现过程导入依赖添加配置编写mq配置类添加业务队列的消费者添加死信队列的消费者添加消息发送者添加消息测试类测试死信队列的应用场景总结死信队列是什么 “死信”是RabbitMQ中的一种消息机制&#xff0c;当你在消费消息时&#…

wafw00f 防火墙探测

kali机器自带防火墙探测工具wafw00&#xff0c;它可以通过发送正常以及不正常甚至包含恶意代码的HTTP请求&#xff0c;来探测网站是否存在防火墙&#xff0c;并识别防火墙的厂商及类型。安装&#xff1a;git clone https://github.com/EnableSecurity/wafw00f.git python setup…

Windows如何查看某个端口被占用的情况?

在工作中&#xff0c;有时会发现端口被占用的情况&#xff0c;导致软件报错或者服务无法启动等问题。在不知道具体哪个进程占用该端口号的情况下&#xff0c;我们可以用下面方法来查找。 举例&#xff1a;我现在发现8090端口被占用了&#xff0c;我现在需要找到并杀掉该进程。…

TCP状态转换

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 TCP状态转换专栏&#xff1a;《Linux从小白到大神》《网络编程》 TCP状态转换示意图如下 针对上面的示…

高并发之读多写少的场景设计(用户中心)

用户中心是一个典型的读多写少系统&#xff0c;可以说我们大部分的系统都属于这种类型&#xff0c;而这类系统通过缓存就能获得很好的性能提升。并且在流量增大后&#xff0c;用户中心通常是系统改造中第一个要优化的模块&#xff0c;因为它常常和多个系统重度耦合&#xff0c;…

消息队列介绍和RabbitMQ的安装

1.消息队列 1.1 MQ的相关概念 1.1.1 什么是MQ MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&#xff0c;只不过队列中存放的内容是message 而已&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递消息。在…

高阶人生从在职读研开始——中国社科院与美国杜兰大学金融管理硕士

说到学历&#xff0c;好多人都不太在意&#xff0c;感觉学历没什么用。等升职学历被卡时&#xff0c;等你想考公学历达不到时&#xff0c;当你想跳槽更大的平台时&#xff0c;学历会显得尤其重要。当机会来临时&#xff0c;我们应该做好全足的准备&#xff0c;而不是眼瞅着机会…

SpringBoot相关操作

01-今日内容 Spring概述、快速入门SpringBoot配置SpringBoot整合 02-SpringBoot概述 SpringBoot提供了一种快速使用Spring的方式&#xff0c;基于约定优于配置的思想&#xff0c;可以让开发人员不必在配置与逻辑业务之间进行思维的切换&#xff0c;全身心的投入到逻辑业务的…

金融信创步入快车道,应“需”而生的监控易运维方案为国产化助力

在我国“28N”信创三步走战略中&#xff0c;金融信创赫然名列其中&#xff0c;成为最早践行信创理论与实操的行业之一。截止到目前&#xff0c;金融信创渗透率业已仅次于党政部门&#xff0c;位列“8”大重点行业之首。超快的发展速度&#xff0c;让金融信创较早的步入“买方市…