返回顶部
首页 > 资讯 > 数据库 >MyBatis-Plus 分页查询以及自定义sql分页
  • 384
分享到

MyBatis-Plus 分页查询以及自定义sql分页

mybatissqlmysql 2023-09-01 09:09:31 384人浏览 八月长安
摘要

一、引言 分页查询每个人程序猿几乎都使用过,但是有部分同学不懂什么是物理分页和逻辑分页。 物理分页:相当于执行了limit分页语句,返回部分数据。物理分页只返回部分数据占用内存小,能够获取数据库最新的状态,实施性比较强,一般适用于数据量比较

一、引言

分页查询每个人程序猿几乎都使用过,但是有部分同学不懂什么是物理分页和逻辑分页。

物理分页:相当于执行了limit分页语句,返回部分数据。物理分页只返回部分数据占用内存小,能够获取数据库最新的状态,实施性比较强,一般适用于数据量比较大,数据更新比较频繁的场景。

逻辑分页:一次性把全部的数据取出来,通过程序进行筛选数据。如果数据量大的情况下会消耗大量的内存,由于逻辑分页只需要读取数据库一次,不能获取数据库最新状态,实施性比较差,适用于数据量小,数据稳定的场合。

那么MP中的物理分页怎么实现呢? 往下看往下看

二、配置

创建mybatisPlusConfig配置类。

@Configurationpublic class MyBatisPlusConfig {         @Bean    public PaginationInterceptor paginationInterceptor() {        return new PaginationInterceptor();    }}

三、具体分页实现

MP的Wrapper提供了两种分页查询的方式,源码如下:

        IPage selectPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper);         IPage> selectMapsPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper);

可见两个分页方法参数都是一致的,只是返回参数略有不同,具体选择根据实际业务为准。

        @Test    public void selectByPage() {        QueryWrapper wrapper = new QueryWrapper();        wrapper.like("name", "雨").lt("age", 40);         Page page = new Page<>(1,2);         //IPage userIPage = userMapper.selectPage(page, wrapper);         IPage> mapiPage = userMapper.selectMapsPage(page, wrapper);          System.out.println("总页数"+mapIPage.getPages());        System.out.println("总记录数"+mapIPage.getTotal());        List> records = mapIPage.getRecords();        records.forEach(System.out::println);    }

以上分页查询执行sql如下,先是查询了一次总记录数,然后在查询的数据。

DEBUG==>  Preparing: SELECT COUNT(1) FROM user WHERE name LIKE ? AND age < ? DEBUG==> Parameters: %雨%(String), 40(Integer)TRACE<==    Columns: COUNT(1)TRACE<==        Row: 2DEBUG==>  Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age < ? LIMIT ?,? DEBUG==> Parameters: %雨%(String), 40(Integer), 0(Long), 2(Long)TRACE<==    Columns: id, name, age, email, manager_id, create_timeTRACE<==        Row: 2, 张雨琪, 31, zjq@baomidou.com, 1088248166370832385, 2019-01-14 09:15:15TRACE<==        Row: 3, 刘红雨, 31, lhm@baomidou.com, 1088248166370832385, 2019-01-14 09:48:16DEBUG<==      Total: 2总页数1总记录数2

现在我们有需求只要查询数据即可, 不关心总记录数等,如果使用默认的方式就消耗不必要的性能。那么解决办法也是很简单的,只需要在创建page对象时传入第三个参数为false即可。

Page page = new Page<>(1,2,false);

四、自定义sql分页查询

有时候查询的数据难免会出现多表连接查询,或者是一些复杂的sql语句,但是这些语句也是需要支持分页查询的,

先定义查询接口,第一个参数要是分页的参数,小编这里演示就写简单的sql。

步骤一:在mapper文件中,编写对应的分页查询接口。

步骤二:在xml中编写对应的sql语句,小编这里演示的 “${ew.customSqlSegment}”,这个是如果你想自定义的sql语句,也想使用wrapper查询条件构造器,则需要在mapper接口中添加参数,以及xml中也要有固定。 

        IPage selectMyPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
             select u.realname from his_ipd_encounter e, his_user u where e.his_uid = u.his_uid         

mapepr如下:需要传入分页的参数,返回的类型也需要是分页对象

 public interface UserMapper extends MyMapper {          IPage selectByHisName(IPage page);}

测试如下:通过查看日志,执行的sql加了分页条件的。

   @Test    public void select(){        // 创建分页参数        Page page = new Page<>(1,2);        IPage result = userMapper.selectByHisName(page);        // 获取数据        List records = result.getRecords();        records.forEach(System.out::println);        System.out.println("总页数 = "+ result.getPages());    }
ARNWarn: Could not find @TableId in Class: com.example.demo.model.HisUser.INFOStarted UserMapperTest in 2.428 seconds (JVM running for 2.959)select u.realname from his_ipd_encounter e, his_user u where e.his_uid = u.his_uidDEBUG==>  Preparing: SELECT COUNT(1) FROM his_ipd_encounter e, his_user u WHERE e.his_uid = u.his_uid DEBUG==> Parameters: TRACE<==    Columns: COUNT(1)TRACE<==        Row: 117DEBUG==>  Preparing: select u.realname from his_ipd_encounter e, his_user u where e.his_uid = u.his_uid LIMIT ?,? DEBUG==> Parameters: 0(Long), 2(Long)TRACE<==    Columns: realnameTRACE<==        Row: 胡伯云TRACE<==        Row: 安元慧DEBUG<==      Total: 2 Time:20 ms - ID:com.example.demo.mapper.UserMapper.selectByHisNameExecute SQL:    com.p6spy.engine.wrapper.PreparedStatementWrapper@61bcbcce 胡伯云安元慧总页数 = 59

来源地址:https://blog.csdn.net/xm393392625/article/details/129901169

您可能感兴趣的文档:

--结束END--

本文标题: MyBatis-Plus 分页查询以及自定义sql分页

本文链接: https://lsjlt.com/news/388070.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MyBatis-Plus 分页查询以及自定义sql分页
    一、引言 分页查询每个人程序猿几乎都使用过,但是有部分同学不懂什么是物理分页和逻辑分页。 物理分页:相当于执行了limit分页语句,返回部分数据。物理分页只返回部分数据占用内存小,能够获取数据库最新的状态,实施性比较强,一般适用于数据量比较...
    99+
    2023-09-01
    mybatis sql mysql
  • Mybatis-Plus分页查询
    分页插件 调用通用mapper提供的selectPage分页方法; 2、自定义查询方法使用分页功能:     - mapper接口中的方法返回值是Page类型     - 第一个参数要求是Page类型 3、映射文件中可以使用sql标签定义公...
    99+
    2023-08-31
    mybatis java mysql
  • MyBatis-Plus联表查询及分页
    MyBatis-Plus联表查询及分页 一、准备工作1、数据库结构以及数据2、依赖3、配置类让mybatis-plus-join在DataScopeSqlInjector中生效4、启动类排除MPJSqlInjector.class ...
    99+
    2023-08-16
    mybatis mysql java
  • MyBatis-Plus实现2种分页方法(QueryWrapper查询分页和SQL查询分页)
    目录 1 MyBatisPlusConfig2 UserPagination3 Mapper3.1 UserMapper.java3.2 UserMap...
    99+
    2024-04-02
  • mybatis-plus实现自定义SQL、多表查询与多表分页查询语句实例
    目录前言1、自定义SQL2、多表查询3、多表分页查询4、多表分页条件查询总结前言 本文介绍了在mybatis-plus中如何实现:自定义SQL语句,多表查询语句,多表分页查询语句 在...
    99+
    2024-04-02
  • Mybatis-Plus——分页+模糊查询
    建表:  create table pms_brand( brand_id bigint not null auto_increment comment '品牌id', name ...
    99+
    2023-09-22
    mybatis mysql
  • Mybatis-Plus实现分页查询
    Mybatis-Plus实现分页查询 文章目录 Mybatis-Plus实现分页查询1.1技术概述1.2技术详述1.2.1配置分页插件1.2.2自定义分页1、如果你的mapper没有继承BaseMapper2、如果你的mapper继...
    99+
    2023-08-17
    mybatis java spring boot
  • Mybatis的分页方式详解以及Mybatis-plus分页。
    目录:   一、Mybatis 分页        一、LIMIT关键字        二、RowBounds实现分页        三、PageHelper   二、Mybatis-plus分页 一、Mybatis 实现分页 (1)使用...
    99+
    2023-09-20
    mybatis java mysql
  • mybatis plus 分页查询出现count()
    出现问题现象 使用mybatisplus分页时候count语句出错,控制台打印的sql为### The error may involve defaultParameterMap, The error occurred while sett...
    99+
    2023-08-17
    mybatis java mysql
  • mybatis-plus分页查询三种方法
    mybatis-plus分页查询 一、前期准备表1、配置类 二、使用selectPage1、Service2、结果 三、使用2种分页查询的写法1、xml2、Mapper3、第一种写法4、第一种结果5、第二种写法6、第二种结果...
    99+
    2023-08-20
    mybatis java 开发语言
  • MyBatis-Plus分页插件IPage的使用展示--分页查询
    MyBatis-Plus分页插件提供了IPage接口来支持分页查询。下面是一个使用示例:1. 在Mapper接口中定义一个方法,使用...
    99+
    2023-09-09
    MyBatis
  • MyBatis-Plus 分页查询的实现示例
    方法: 使用selectPage()方法,第一个参数是传入分页方法(传入当前页和当前显示多少条数据),第二个参数是传入查询条件(如果查询全部的话,可以传null)。 前提: 表中的...
    99+
    2024-04-02
  • mybatis-plus分页查询的3种方法
    今天小编给大家分享的是mybatis-plus分页查询的3种方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。一、前期准备表CREATE TABLE `schoo...
    99+
    2023-08-03
  • JPA原生SQL(自定义SQL)分页查询逻辑详解
    目录JPA原生SQL(自定义SQL)分页查询经过测试下面方法可以pageable对象里定义排序的字段JPA原生SQL分页查询踩坑记录1.问题简述2.解决方案JPA原生SQL(自定义S...
    99+
    2024-04-02
  • 【解决】Mybatis-plus分页插件一对多分页查询问题
    项目场景: 一对多分页查询,查询主表的同时将子表数据查出 问题描述 Mybatis-plus分页插件多表连查寻时数量不对 总条数有8条 实际只查询出了7条 结果丢失了一条数据,并且还会导致主数据...
    99+
    2023-09-23
    mybatis java mysql
  • oracle+mybatis-plus+springboot怎么实现分页查询
    本篇内容主要讲解“oracle+mybatis-plus+springboot怎么实现分页查询”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“oracle+mybatis-plus+springb...
    99+
    2023-06-20
  • MyBatis-Plus分页查询的方法有哪些
    本文小编为大家详细介绍“MyBatis-Plus分页查询的方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“MyBatis-Plus分页查询的方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。方法:...
    99+
    2023-06-29
  • mybatis-plus分页查询三种方法小结
    目录一、前期准备表二、使用selectPage三、使用2种分页查询的写法1、xml2、Mapper3、第一种写法4、第一种结果5、第二种写法6、第二种结果四、使用PageH...
    99+
    2023-05-20
    mybatis-plus 分页查询 mybatis 分页查询
  • mybatis-plus 多表关联条件分页查询
    此处以一对多,条件分页查询为例: 一.表结构: 主表 CREATE TABLE `t_user` ( `id` bigint NOT NULL AUTO_INCREMENT, `user_name` varchar(255) DEFAU...
    99+
    2023-08-20
    mybatis mysql java
  • Mybatis Plus一对多联表查询及分页解决方案
    文章目录 需求需求分析分页问题说明分页问题原因一对多场景一一对多场景二性能优化优化解决方案 需求 查询用户信息列表,其中包含用户对应角色信息,页面检索条件有根据角色名称查询用户列...
    99+
    2023-10-22
    mybatis java 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作