Mybaties-plus 分页使用

2023-11-06

1.简介:

查询分页分为物理分页逻辑分页

1)逻辑分页: 一次性查出所有数据,然后在内存中筛选需要的数据。

缺点:大数据量时容易造成内存溢出,因为是一次性查出每次返回需要的所有数据时效性低不推荐使用。

2)物理分页: 通过sql 的limit 去控制数据的偏移量每次只查出需要的数据效率高,推荐使用。

2.mybaties-plus 分页

mybaties-plus 默认的分页插件为逻辑分页不推荐使用所以需要扩展分页插件。

2.1 导入mybaties-plus 依赖

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

2.2 配置mybaties-plus 分页插件

@EnableTransactionManagement(proxyTargetClass = true)
@Configuration
public class MybatisPlusConfig
{
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor()
    {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 分页插件
        interceptor.addInnerInterceptor(paginationInnerInterceptor());
        return interceptor;
    }

    /**
     * 分页插件,自动识别数据库类型 https://baomidou.com/guide/interceptor-pagination.html
     */
    public PaginationInnerInterceptor paginationInnerInterceptor()
    {
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
        // 设置数据库类型为mysql
        paginationInnerInterceptor.setDbType(DbType.MYSQL);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        paginationInnerInterceptor.setMaxLimit(-1L);
        return paginationInnerInterceptor;
    }
}

2.3 分页查询实操

2.31)使用mybaties-plus 自动生成方法分页

使用service原生的page方法,推荐在controller层的请求参数继承一个基类,基类包含分页信息。

基类

@Data
public class BasePageRequest {

    private Long current= 1L;
    private Long size= 50L;
    /**
     *  分页类型 0 不分页 1分页
     */
    private Integer pageType=1;


    public Page toMybatisPage() {
        if(pageType==0){
            size=10000L;
        }

        return new Page(current, size);
    }
}

请求参数类

@Data
public class DeptRequest extends BasePageRequest{

    private Long id;
    private String name;

}

controller

  @RequestMapping("/listByPage")
    public ResponseUtil listByPage(DeptRequest deptRequest){
        Page page = deptService.page(deptRequest.toMybatisPage());
        return ResponseUtil.ok(page.getRecords());
    }

请求参数:

在这里插入图片描述

执行sql:

分页插件每次会先查询 count,如果count为0则不会执行查询否则执行对应的分页查询。
在这里插入图片描述

结果:

{
    "code": 200,
    "msg": null,
    "data": [
        {
            "createBy": null,
            "createTime": "2022-06-15",
            "updateTime": "2022-06-15",
            "deptId": 2,
            "parentId": 0,
            "name": "程序",
            "orderNum": 1,
            "departmentLeader": "lisi"
        }
    ]
}

2.32)自定义sql分页查询

后续直接在单元测试演示

1)xml定义sql
在方法第一个参数传入IPage,方法返回值也为IPage,这两个IPage是一个对象。

mapper:

IPage<Dept>listMyPage(IPage<Dept>page);

xml:

<select id="listMyPage" resultType="Dept">
    select * from t_dept
</select>

测试

 @Test
    void testListByPage(){
        IPage<Dept> deptIPage = deptMapper.listMyPage(new Page<>(2, 2));
        log.info("----------total:{}",deptIPage.getTotal());
        deptIPage.getRecords().forEach(System.out::println);
    }

执行sql和结果:
在这里插入图片描述

2)xml 自定义sql并含有参数

mapper:

    IPage<Dept>listMyPage2(IPage<Dept>page,@Param("dept")Dept dept);

xml:

 <select id="listMyPage2" parameterType="Dept"   resultType="Dept">
        select * from t_dept where parent_id=#{dept.parentId}
    </select>

测试:

   @Test
    void testListByPage2(){
        IPage<Dept> deptIPage = deptMapper.listMyPage2(new Page<>(2, 2),new Dept().setParentId(0L));
        log.info("----------total:{}",deptIPage.getTotal());
        deptIPage.getRecords().forEach(System.out::println);
    }

执行sql和结果:
在这里插入图片描述

3)mapper 里面 @select 带参数分页查询

mapper:

     @Select("select * from t_dept where parent_id=#{dept.parentId}")
     IPage<Dept>listMyPage3(IPage<Dept>page,@Param("dept") Dept dept);

测试:


    @Test
    void testListByPage3(){
        IPage<Dept> deptIPage = deptMapper.listMyPage3(new Page<>(2, 2),new Dept().setParentId(0L));
        log.info("----------total:{}",deptIPage.getTotal());
        deptIPage.getRecords().forEach(System.out::println);
    }

执行sql和结果:

在这里插入图片描述

4)mapper 里面 @select 带Wrapper参数分页查询

mapper:

  @Select("select * from t_dept ${ew.customSqlSegment} ")
     IPage<Dept>listMyPage4(IPage<Dept>page,@Param(Constants.WRAPPER) Wrapper<Dept> deptWrapper);

测试:

 @Test
    void testListByPage4(){
        LambdaQueryWrapper<Dept> wrapper = Wrappers.<Dept>lambdaQuery().eq(Dept::getParentId, 0L);
         wrapper = wrapper.in(Dept::getDeptId, Arrays.asList(1, 2, 3));
        log.info(wrapper.getCustomSqlSegment());
        IPage<Dept> deptIPage = deptMapper.listMyPage4(new Page<>(1, 2),wrapper);
        log.info("----------total:{}",deptIPage.getTotal());
        deptIPage.getRecords().forEach(System.out::println);
    }

执行sql和结果:

在这里插入图片描述

以上就是在mybaties-plus的几种分页查询方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mybaties-plus 分页使用 的相关文章

  • Java 中等效的并行扩展

    我在 Net 开发中使用并行扩展有一些经验 但我正在考虑在 Java 中做一些工作 这些工作将受益于易于使用的并行库 JVM 是否提供任何与并行扩展类似的工具 您应该熟悉java util concurrent http java sun
  • Grails 3.x bootRun 失败

    我正在尝试在 grails 3 1 11 中运行一个项目 但出现错误 失败 构建失败并出现异常 什么地方出了错 任务 bootRun 执行失败 进程 命令 C Program Files Java jdk1 8 0 111 bin java
  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O

随机推荐

  • 原码,反码,补码的使用

    机器码 1 首先得知道 什么是机器码 将符号 数字化 的二进制数就叫做机器码 其中有两点 1 将符号数字化 也就是将 用数字0表示 用数字1表示 最高位表示符号位 2 必须是二进制数 因为计算机中所有的数据都是以二进制形式存储的 2 了解了
  • HBase主要运行机制(物理存储和逻辑架构)

    本节将对 HBase 的主要运行机制进行简单介绍 HBase 的物理存储 HBase 表中的所有行都是按照行键的字典序排列的 因为一张表中包含的行的数量非常多 有时候会高达几亿行 所以需要分布存储到多台服务器上 因此 当一张表的行太多的时候
  • 【MySQL高级篇笔记-数据库备份与恢复(下) 】

    此笔记为尚硅谷MySQL高级篇部分内容 目录 一 物理备份与逻辑备份 二 mysqldump实现逻辑备份 1 备份一个数据库 2 备份全部数据库 3 备份部分数据库 4 备份部分表 5 备份单表的部分数据 6 排除某些表的备份 7 只备份结
  • 【VSCode】Windows系统的WSL无法启动vscode问题

    在WSL环境中无法启动vscode时 有可能是 WSL 插件的影响 可以使用下面的步骤来解决 Open VS Code on Windows Open Extensions and then search on WSL It should
  • Qt使用Qt Designer进行界面设计

    上一章我们使用代码直接进行界面设计 这一章我们使用Qt Designer进行界面设计 简单直接 所见即所得 大大提高了工作效率 特别是对于复杂界面 1熟悉Qt Designer Qt Designer是Qt专为界面设计做的软件 使得用户能够
  • 使用Python和OpenCV进行图像拼接和全景图构建

    使用Python和OpenCV进行图像拼接和全景图构建 1 效果图 2 原理及步骤 3 源码 3 1 拼接类源码 3 2 拼接用到的工具类 3 3 叠加多张图像源码 参考 这篇博客将介绍如何使用OpenCV执行图像拼接和全景构建 即给定两个
  • Hana Studio开发简介

    Hana Studio作为SAP官方的IDE 工具 推出也有一段时间了 就目前使用的情况来看 如果是做常规S 4开发 SAP GUI还是首要选择 一 IDE安装路径 链接 https pan baidu com s 1qMg8duocTa3
  • pyqt5实现按钮单窗口多页面切换

    1 使用QT Designer进行设计 创建一个MainWindow 从左侧选出Push Button Stacked Widget分别拖到我们的MainWindow里 怕看不见Stacked Widget 给他上个色 在QT Design
  • vant-weapp Area 省市区选择的使用及遇到的坑

    json中 导入 van area vant weapp area index 基础用法
  • SpringCloud gateway (史上最全)

    1 1 SpringCloud Gateway 简介 SpringCloud Gateway 是 Spring Cloud 的一个全新项目 该项目是基于 Spring 5 0 Spring Boot 2 0 和 Project Reacto
  • Kubernetes踩坑(二): Service IP(LVS)间断性TCP连接故障排查

    问题阶段 一 用户反应某个redis使用卡顿 连接该redis服务使用的是svc代理 即ipvs snat的方式 ipvsadm L发现 VIP收到的6379端口的数据包 会以rr的方式分别转发到pod的80 6379端口上 相当于会有50
  • mysql增加分区

    增加分区 是修改原有分区 从而替换现有分区 ALTERTABLE xxx表 PARTITION BY RANGE COLUMNS CREATE TIME PARTITION p20210901 VALUES LESS THAN 2021 1
  • 【华为OD机试c++】最长广播效应【2023 B卷

    题目描述 某通信网络中有N个网络结点 用1到N进行标识 网络中的结点互联互通 且结点之间的消息传递有时延 相连结点的时延均为一个时间单位 现给定网络结点的连接关系link i u v 其中u和v表示网络结点 当指定一个结点向其他结点进行广播
  • linux grep 带空格的内容,或者搜索多个单词,一段话

    错误示范 more xxx log grep UPDATE user info 正确方法 more xxx log grep UPDATE user info
  • 第23讲 Python range 数据类型

    您的 关注 和 点赞 是认可 是支持 是动力 如意见相佐 可留言 本人必将竭尽全力试图做到准确和全面 终其一生进行修改补充更新 本文首发在IT羊资源网 IT羊资源网 网址 https www ityangzy com IT羊资源网是IT世界
  • GB9706.1-2007+2020和IEC60601-1:2005 3.0+2012 3.1标准主要差异解析

    目录 GB9706 1 2007医用电气设备 第1部分 安全通用要求 GB9706 1 2020医用电气设备 第1部分 基本安全和基本性能的通用要求 IEC60601 1 第二版和第三版差异 1 最关键变化 2 新术语名词引用 3 设备分类
  • [1022]Hive insert 字段表错位

    文章目录 Hive insert 字段表错位踩坑 1 问题描述 2 排查过程 3 问题定位 4 解决方案 hive的insert语句列顺序问题以及新增字段遇到的坑 insert语句列顺序 对新增字段插入数据再查询发现是NULL Hive i
  • 技术管理主要做什么?

    最近一直在思考技术转管理过程中需要注意到的一些事情 现在就总结下分享给大家看看 核心职责 确定团队目标 不论项目大小 一定要有目标 有目标才能让所有人看到方向 明确每天工作的意义 单纯技术人员应该切换思维为全局性 而不局限于技术层面 现在个
  • 某盾滑块js逆向

    注 本篇博客仅供学习使用 请勿用做其他商业用途 如有侵权 请联系本菜鸟删除 本小菜鸟已经快两个月没更新文章了 一年总有那么356天不想努力 就想躺平 最开始学习js逆向的时候 用Python算法还原了某盾的空间推理 到现在已经过去半年多 这
  • Mybaties-plus 分页使用

    1 简介 查询分页分为物理分页和逻辑分页 1 逻辑分页 一次性查出所有数据 然后在内存中筛选需要的数据 缺点 大数据量时容易造成内存溢出 因为是一次性查出每次返回需要的所有数据时效性低不推荐使用 2 物理分页 通过sql 的limit 去控