Mybatis Plus如何使用自定义方法实现分页呢?

2023-05-16

转自:

Mybatis Plus如何使用自定义方法实现分页呢?

下文笔者讲述Mybatis之Plus实现自定义分页的方法分享,如下所示

写在前面的话


 在以前没有自定义分页方法时
 我们使用Limit currIndex 和 pageSize
   在MyBatis中的sql信息即可实现分页效果
   如: 
     <select id="queryUsersBySql" parameterType="map" resultMap="usermapper">        
         select * from user limit #{currIndex} , #{pageSize}     
     </select>
     <select id="queryUsersCount" resultType="java.lang.Integer" parameterType="java.util.Map">       
        select count(*) from user     
     </select>
 
 采用这种模式,编写的sql,非常的冗余
 而且不好维护,所以笔者编写一个拦截器
 用于实现分页插件
   

Mybatis-Plus使用说明

添加Mybatis-plus


       <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>2.1.8</version>
        </dependency>
  

配置拦截器


import com.baomidou.mybatisplus.plugins.PaginationInterceptor;    
import org.springframework.context.annotation.Bean;    
import org.springframework.context.annotation.Configuration;
    /**     
    * mybatis-plus配置     
    *     
    */    
    @Configuration    
    public class MybatisPlusConfig {
        /**         
        * 分页插件         
        */        
        @Bean        
        public PaginationInterceptor paginationInterceptor() {             
            PaginationInterceptor page = new PaginationInterceptor();             
            page.setDialectType("mysql");             
            return page;        
        }    
    }
   

service实现


    传统的查询方式
    SELECT *
    FROM sys_user
    WHERE (name='猫猫' AND sex=0 AND age BETWEEN '20' AND '30')
    LIMIT 0,10

    使用Mybtis-plus,可以轻松实现分页查询
    //分页查询 10 条姓名为‘猫猫’、性别为男,且年龄在20至30之间的用户记录   
 List<User> userList = userMapper.selectPage(
        new Page<User>(1, 10),
        new EntityWrapper<User>().eq("name", "猫猫")
                .eq("sex", 0)
                .between("age", "20", "30")
 )
 
以上是单表查询的分页实现,多表查询,或者比较复杂的查询语句也可以轻松实现:

   public Page<User> selectUserPage(Page<User> page, Integer state) {
        // 不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题
        // page.setOptimizeCountSql(false);
        // 不查询总记录数
        // page.setSearchCount(false);
        // 注意!! 分页 total 是经过插件自动 回写 到传入 page 对象
        return page.setRecords(userMapper.selectUserList(page, state));
    }
 
注意
 根据前端传来的分页参数
 当前第几页,每页多少条,
 构造一个page 对象,初始化这些参数
 将page对象传递给mapper
 拦截器会自动在sql语句加上limit查询
自动查询总记录数并写回page对象
  

mapper接口及xml


 public interface UserMapper{//可以继承或者不继承BaseMapper
    /**
     * <p>
     * 查询 : 根据state状态查询用户列表,分页显示
     * </p>
     *
     * @param page
     *            翻页对象,可以作为 xml 参数直接使用,传递参数 Page 即自动分页
     * @param state
     *            状态
     * @return
     */
    List<User> selectUserList(Pagination page, Integer state);
}

UserMapper.xml 等同于编写一个普通 list 查询,mybatis-plus 自动替你分页

    <select id="selectUserList" resultType="User">
        SELECT * FROM user WHERE state=#{state}
    </select>
  

注意事项
  必须传递page参数
  否则不能实现分页
   查询sql可实现多表联合查询的复杂语句  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mybatis Plus如何使用自定义方法实现分页呢? 的相关文章

随机推荐

  • 【IOS】史上最全文件操作NSFileManager

    功能列表 判断文件是否存在 43 BOOL fileExistsAtPath NSString aPath 判断文件是否存在Documents下 43 BOOL fileExistsAtDocumentsWithFileName NSStr
  • 【IOS】StoryBoard传值TableView点击Cell跳转传值(segue)

    问题 void prepareForSegue UIStoryboardSegue segue sender id sender 以上方法会先于 void tableView UITableView tableView didSelectR
  • Android Windows虚拟串口调试

    1 Configure Virtual Serial Port Driver 创建虚拟串口 2 设置Android模拟器虚拟串口 进入Android SDK的tools目录 xff0c 通过cmd执行命令 xff1a emulator ex
  • 贪心算法之木棍问题

    问题 H 木棒 时间限制 1 Sec 内存限制 32 MB 提交 147 解决 60 提交 状态 题目描述 现有n根木棒 xff0c 已知它们的长度和重量 要用一部木工机一根一根地加工这些木棒 该机器在加工过程中需要一定的准备时间 xff0
  • cephadm安装ceph v15

    cephadm 安装ceph v15准备 参考安装文档 有问题可以直接留言 xff0c 大家一起交流 xff0c 以下都是部署的比较基础的东西 https docs ceph com en latest cephadm http www d
  • Mysql启用SSL以及JDBC连接Mysql配置

    文章目录 一 Mysql启用SSL配置1 检查mysql是否支持ssl2 设置用户是否使用ssl连接1 查看用户是否使用SSL连接2 强制某用户使用SSL连接3 测试不使用ssl能否连接上4 取消用户使用ssl连接 二 JDBC连接Mysq
  • Proxmox ve 使用cloud-init模板生成虚拟机

    本文中斜体字部分为命令行 1 Cloud init 的作用 cloud init是一个Linux虚拟机的初始化工具 xff0c 被广泛应用在AWS和OpenStack等云平台中 xff0c 用于快速新建虚拟机 xff0c 并进行一些系统初始
  • YUV文件转opencv的Mat格式并且显示播放

    include lt stdio h gt include lt string h gt include lt opencv2 core core hpp gt include lt opencv2 imgproc imgproc hpp
  • python 元组的元素的元素可以被修改

    Python的元组与列表类似 xff0c 不同之处在于元组的元素不能修改 元组使用小括号 xff0c 列表使用方括号 元组创建很简单 xff0c 只需要在括号中添加元素 xff0c 并使用逗号隔开即可 假设元组的第3个元素是一个字典 xff
  • VOT Toolkit工具使用说明(Python版)

    VOT Toolkit工具使用说明 xff08 Python版 xff09 一 工具链接 vot toolkit python版 github链 xff1a https github com votchallenge toolkit vot
  • 构建ubuntu base 出现apt update错误

    apt get update 错误 Get 1 http ports ubuntu com ubuntu ports bionic InRelease 242 kB Err 1 http ports ubuntu com ubuntu po
  • pip 安装numba报错

    pip 安装numba报错 问题描述 xff1a 本人在一个十分干净的容器里面 xff0c 想pip安装numba库 xff0c 但是该库需要依赖llvmlite这个库 xff0c 然后就它自己安装llvmlite的时候 xff0c 就报错
  • VS code 进行python远程运行与调试以及简单可视化变量

    23 04 29更新 xff0c 增加环境变量的debug配置项 23 03 24更新 这个配置项实在太常用了 置顶了 我这自己也天天开这篇文章复制粘贴的 34 name 34 34 train debug 34 34 type 34 34
  • VScode debuger 的不算bug的bug,不运行了

    具体办法就是改python拓展的版本 xff0c 记得要关闭自动更新 xff0c 不然一会插件又不能用了 改进详情 xff0c 见这位大佬吧 xff0c 我就不细说了 利用vscode对python代码做Debug xff0c 无法调试的解
  • latex引用跳转失效

    这两天写论文 xff0c 写也就写了 xff0c 某一次查看的时候 xff0c 突然发现 xff0c 全文的引用跳转通通失效 就引用序号都对着呢 xff0c 不是显示的 xff1f 号那种完全找不到的情况 但是点击那个跳转引用的超链接 xf
  • WinEdt修改快捷键,自定义功能按键,增加快捷指令

    xff08 还得搞封面 xff0c 随便敲几个字吧 xff09 在前一段时间 xff0c 为了快速加粗Latex里面的文字 xff0c 就查了一下怎么搞快捷键 在菜单栏Insert gt Font gt Bold是有这个加粗按钮的 xff0
  • Ubuntu下能连上无线但不能上网

    Ubuntu下连上无线网以后 xff0c 无法上网问题 先确认是否可以访问网路 xff0c 使用一下命令 ping www baidu com 正常理论下 xff0c 上面一句应该是连不通 xff0c 会返回无法解析 然后我们再ping一下
  • uefi和legacy bios的深度剖析

    这个是我总结的 参考了几个论坛还有 鸟哥的私房菜 还有一部分是我自己的经验 适合初步了解uefi和legacy的人更深入的了解 uefi amp legacy Legacy 1 我们可将MBR磁盘分区结构用下图简单表示 xff08 Wind
  • 大数据Hadoop生态圈介绍

    大数据Hadoop生态圈 组件介绍 Hadoop是目前应用最为广泛的分布式大数据处理框架 xff0c 其具备可靠 高效 可伸缩等特点 Hadoop的核心组件是HDFS MapReduce 随着处理任务不同 xff0c 各种组件相继出现 xf
  • Mybatis Plus如何使用自定义方法实现分页呢?

    转自 Mybatis Plus如何使用自定义方法实现分页呢 下文笔者讲述Mybatis之Plus实现自定义分页的方法分享 如下所示 写在前面的话 在以前没有自定义分页方法时 我们使用Limit currIndex 和 pageSize 在M