Mybatis Plus 自定义方法实现分页

2023-05-16

一般物理分页,即通过sql语句分页,都是在sql语句后面添加limit分页语句,在xml文件里传入分页的参数,再多配置一条sql,用于查询总数:

     <select id="queryStudentsBySql" parameterType="map" resultMap="studentmapper">        
         select * from student limit #{currIndex} , #{pageSize}     
     </select>
     <select id="queryStudentsCount" resultType="java.lang.Integer" parameterType="java.util.Map">       
        select count(*) from student     
     </select>
 

这样可以实现分页,但是每条sql都这样写,很冗余,而且不好维护,所以高级一点的方式就是自定义的一个拦截器,拦截所有需要分页的查询语句,并且利用获取到的分页相关参数统一在sql语句后面加上limit分页的相关语句,一劳永逸,不需要再每条语句都配置一下,拦截器具体怎么实现不说了,因为Mybatis Plus 已经有类似这样一个拦截器的分页插件,利用这个分页插件,不需要自己写拦截器就可以轻松实现分页查询:
Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

1、 添加Mybatis-plus

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

2、配置拦截器

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;        
        }    
    }
 

3、service实现

    传统的查询方式:

    SELECT *
    FROM sys_user
    WHERE (name='张三' AND sex=0 AND age BETWEEN '18' AND '50')
    LIMIT 0,10
      利用 Mybtis-plus,可以轻松实现分页查询

 // 分页查询 10 条姓名为‘张三’、性别为男,且年龄在18至50之间的用户记录   
 List<User> userList = userMapper.selectPage(
        new Page<User>(1, 10),
        new EntityWrapper<User>().eq("name", "张三")
                .eq("sex", 0)
                .between("age", "18", "50")
 )

以上是单表查询的分页实现,多表查询,或者比较复杂的查询语句也可以轻松实现:

   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对象。
4 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 自定义方法实现分页 的相关文章

随机推荐

  • 关于计算机研究和写作的链接收集

    研究相关的资源 What is Research in Computer Science 计算科学的研究是什么 xff1f 翻译 Basic Research Skills in Computer Science 计算科学的基本研究方法 R
  • 环境问题-无外接显示屏(虚拟显示屏)远程控制Ubuntu

    参考 更新 xff1a 后来向日葵推出SSH远程连接 xff0c 一个月挺便宜的 使用Ubuntu内置的vino VNC提供远程桌面访问 安装vino xff1a sudo apt install vino 配置屏幕共享 配置Ubuntu在
  • spring-boot的三种启动方式

    有段时间没有写博客了 xff0c 也在努力的从传统单机开发向分布式系统过度 xff0c 所以再次做一些笔记 xff0c 以方便日后查看 直接进入正题吧 xff0c 今天记录spring boot项目的三种启动方式 spring boot的启
  • 程序员做一辈子?

    首先 xff0c 程序员真有必要干一辈子吗 xff1f 如果你是个搬砖的 xff0c 你会考虑一辈子搬砖吗 xff1f 你肯定会想着过几年挣钱了 xff0c 买个车跑运输 xff0c 或者自己做工头 对程序员来说 xff0c 真心没有必要干
  • linux 远程桌面

    文章目录 linux 远程桌面服务端tigervnc设置VNC设置开机自启VNC设置开机自启修改防火墙配置 客户端使用MobaXterm连接 linux 远程桌面 使用tigervnc实现远程桌面 服务端 tigervnc设置 1 安装ti
  • vxWorks学习笔记

    vxWorks学习笔记 1 xff0e VxWorks开发方式 xff1a 交叉开发 xff0c 即将开发分为主机 xff08 host xff09 和目标机 xff08 target xff09 两部分 类似于dos下C语言程序的开发 合
  • android:stateNotNeeded="true"的作用

    这个属性默认情况为false xff0c 若设为true xff0c 则当Activity重新启动时不会调用onSaveInstanceState xff08 xff09 方法 xff0c 同样 xff0c onCreate xff08 x
  • 三种文件分配方式的区别

    文件分配方式分为三种 xff1a 连续分配 链接分配 索引分配 其中链接分配又分为隐式链接分配和显式链接分配 xff1b 索引分配又分为单级索引分配 两级 xff08 多级 xff09 索引分配 xff0c 混合索引分配 这里要说的是显式链
  • java 读取文件的几种方式和通过url获取文件

    public class ReadFromFile 以字节为单位读取文件 xff0c 常用于读二进制文件 xff0c 如图片 声音 影像等文件 public static void readFileByBytes String fileNa
  • C语言常见英文词汇表

    前言 今天整理资料的时候发现了大一的好玩的资料 xff0c 就放出来吧 xff01 词汇表 int integer 整性 xff08 数 xff09 auto automatic 自动的 float float 浮点 xff08 数 xff
  • WIFI安全测试之WPS(PIN)加密暴力破解

    前言 无线AP的接入验证有很多种方式 xff0c 家用无线路由器的验证方式包括OPEN WEP WPA WPA2 xff0c WPS的出现降低了接入验证的复杂度 xff0c 但是这种方式却隐含带来许多问题 同时由于很早就入手了第一批WIFI
  • Arduino+蜂鸣器制作有趣的小音乐

    Arduino相关姿势 Arduino是一个开源的硬件平台 xff0c 包括开发套组 xff08 开发板和相关的模块以及连线 xff09 和IDE 开发语言基于C 核心是一块8位ATmega328的处理器 xff0c 这块处理器是AVR单片
  • 计算机图形学笔记

    前言 图形学还是相对比较重要的课程 xff0c 趁着刚刚学完简要记录一下 基本内容 基本几何元素及其表示 xff0c 点 线 面 环以及三维形体 一般的 xff0c 我们使用参数方程来表示一个几何元素 参数方程中未知数的个数为元素的维数 三
  • 深入理解Java中的String

    深入理解Java中的String 本篇转载自博客园 xff0c 原作者平凡希 xff0c 特此说明
  • 反爬虫

    反爬虫
  • 设计模式——生产消费者模式

    设计模式 生产消费者模式 生产者消费者问题是线程模型中的经典问题 xff1a 生产者和消费者在同一时间段内共用同一存储空间 xff0c 生产者向空间里生产数据 xff0c 而消费者取走数据 像图片下载加载的模型就可以参考这个模型 UML图
  • win10如何修改mac地址(亲测通过)

    1 查看现有的mac地址 步骤 xff1a 打开cmd界面 xff0c 输入ipconfig all按回车 如下图 xff0c 箭头所指即为当前mac地址 2 屏幕右下角右键点击网络图标 xff0c 见下图 打开网络和共享中心 xff0c
  • eclipse怎么恢复默认界面

    Eclipse里面将界面恢复到默认状态 xff1a 1 选择Eclipse的工具栏里面的 窗口 xff08 Window xff09 xff0c xff08 Window Perspective Reset Perspective xff0
  • fatal: Authentication failed could not read from remote repository

    Git 无法clone pull fetch 异常 xff1a fatal could span class hljs operator not span span class hljs built in read span span cl
  • Mybatis Plus 自定义方法实现分页

    一般物理分页 xff0c 即通过sql语句分页 xff0c 都是在sql语句后面添加limit分页语句 xff0c 在xml文件里传入分页的参数 xff0c 再多配置一条sql xff0c 用于查询总数 xff1a lt select id