MyBatis Plus 实现多表分页查询功能的示例代码

 更新时间:2020年08月31日 10:19:24   作者:骑驴的小牧童  
这篇文章主要介绍了MyBatis Plus 实现多表分页查询功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

在Mybatis Plus 中,虽然IService 接口帮我们定义了很多常用的方法,但这些都是 T 对象有用,如果涉及到 多表的查询,还是需要自定义Vo 对象和自己编写sql 语句,Mybatis Plus提供了一个Page 对象,查询是需要设置其中的 size 字段 和 current 字段的值

一、分页配置

可以直接使用selectPage这样的分页,但返回的数据确实是分页后的数据,但在控制台打印的SQL语句其实并没有真正的物理分页,而是通过缓存来获得全部数据中再进行的分页,这样对于大数据量操作时是不可取的,那么接下来就叙述一下,真正实现物理分页的方法。
官方在分页插件上如是描述:自定义查询语句分页(自己写sql/mapper),也就是针对自己在Mapper中写的方法,但经过测试,如果不配置分页插件,其默认采用的分页为RowBounds的分页即逻辑分页,也就是先把数据记录全部查询出来,然在再根据offset和limit截断记录返回(数据量大的时候会造成内存溢出),故而不可取,而通过分页插件的配置即可达到物理分页效果。

新建一个MybatisPlusConfig配置类文件,代码如下所示:

import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
public class MybatisPlusConfig {
 
  /**
   * mybatis-plus分页插件<br>
   */
  @Bean
  public PaginationInterceptor paginationInterceptor() {
    PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
    return paginationInterceptor;
  }
}

二、使用分页进行单表的查询

对于单表的分页查询,ServiceImpl 类已经为我们提供了对应的方法 selectPage(),并将结果封装到Page 对象中:

在这里插入图片描述

在项目开发当中,都会将分页的一些参数封装成一个类 PageReq(不要在意这个Req 为什么不是全大写)->import java.io.Serializable;

public class PageReq implements Serializable {

  /**
   * 每页显示大小
   */
  private long size;

  /**
   * 当前页码
   */
  private long current;

  /**
   * 最大页数
   */
  private long maxCurrent;

  /**
   * 数据总条数
   */
  private long total;

  public long getSize() {
    return size;
  }

  public void setSize(long size) {
    this.size = size;
  }

  public long getCurrent() {
    return current;
  }

  public void setCurrent(long current) {
    this.current = current;
  }

  public long getMaxCurrent() {
    return maxCurrent;
  }

  public void setMaxCurrent(long maxCurrent) {
    this.maxCurrent = maxCurrent;
  }

  public long getTotal() {
    return total;
  }

  public void setTotal(long total) {
    if(size != 0){
      if(total % size != 0){
        maxCurrent = total / size + 1;
      }else {
        maxCurrent = total / size;
      }
    }
  }

  public PageReq() {

  }

  public PageReq(long size, long current, long total) {
    this.size = size;
    this.current = current;
    this.total = total;
    setTotal(total);
  }
}

功能编写:

在这里插入图片描述
在这里插入图片描述

执行完之后,会将查询的接口封装到我们 Page的 对象中:

在这里插入图片描述

三、多表关联分页查询

对于多表关联的查询时,还是需要编写 VO 类和 手动的在Mapper.xml 中编写sql,虽然是可以不用创建VO,用Map 的方式接受返回的结果,但这样只会更麻烦,甚至VO 是很有可能在其他地方使用的
先准备个VO类:

在这里插入图片描述

编写Mapper接口,添加一个分页查询的方法
package com.eiot.e_view.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.eiot.e_view.model.req.RoomPageReq;
import com.eiot.e_view.model.vo.RoomVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface RoomMapper extends BaseMapper<Room> {

  List<RoomVO> getRoomPageList(Page page, @Param("roomPageReq")RoomPageReq roomPageReq);
}

编写sql,和我们使用Mybatis 没有区别:

在这里插入图片描述
在这里插入图片描述

编写Server :

在这里插入图片描述

执行结果:

在这里插入图片描述

总结

到此这篇关于MyBatis Plus 实现多表分页查询功能的示例代码的文章就介绍到这了,更多相关MyBatis Plus 多表分页查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • maven的升级版maven-mvnd的使用小结

    maven的升级版maven-mvnd的使用小结

    maven-mvnd是Maven的升级版,通过将构建过程放在守护进程中,实现了更快的编译速度和更低的内存占用,下面就来介绍一下如何使用,感兴趣的可以了解一下
    2025-01-01
  • 解析JPA的视图查询问题

    解析JPA的视图查询问题

    这篇文章主要是对JPA的视图查询问题进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • 解决Mybatis plus实体类属性与表字段不一致的问题

    解决Mybatis plus实体类属性与表字段不一致的问题

    这篇文章主要介绍了Mybatis plus实体类属性与表字段不一致解决方法,文末给大家提到了Mybatis-plus中数据库表名和表字段名的相关知识,需要的朋友可以参考下
    2022-07-07
  • SpringBoot+MyBatis-Plus实现分页示例

    SpringBoot+MyBatis-Plus实现分页示例

    本文介绍了SpringBoot+MyBatis-Plus实现分页示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • Java 栈和队列的相互转换详解

    Java 栈和队列的相互转换详解

    栈和队列,严格意义上来说,也属于线性表,因为它们也都用于存储逻辑关系为 "一对一" 的数据,但由于它们比较特殊,因此将其单独作为一章,做重点讲解
    2022-02-02
  • 详解Java中Collections.sort排序

    详解Java中Collections.sort排序

    Comparator是个接口,可重写compare()及equals()这两个方法,接下来通过本文给大家介绍Java中Collections.sort排序,需要的的朋友参考下吧
    2017-04-04
  • IDEA如何撤销本地commit的代码

    IDEA如何撤销本地commit的代码

    这篇文章主要介绍了IDEA如何撤销本地commit的代码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 详解MybatisPlus中@TableLogic注解的使用

    详解MybatisPlus中@TableLogic注解的使用

    @TableLogic一般用于实现数据库数据逻辑删除,本文我们将介绍 @TableLogic 注解的用法,以及每个属性的实际意义和用法,感兴趣的可以了解一下
    2022-06-06
  • java socket编程实例代码讲解

    java socket编程实例代码讲解

    这篇文章主要介绍了java socket编程示例讲解,大家参考使用吧
    2013-12-12
  • Spring MVC的三种异常处理方式实例详解

    Spring MVC的三种异常处理方式实例详解

    在SpringMVC 中,不管是编译异常还是运行时异常,都可以最终由 SpringMVC提供的异常处理器进行统一处理,这样就避免了随时随地捕获处理的繁琐性,这篇文章主要介绍了Spring MVC的三种异常处理方式 ,需要的朋友可以参考下
    2024-01-01

最新评论