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

  

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

  

  

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

  

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

        进口com.baomidou.mybatisplus.plugins.PaginationInterceptor;   进口org.mybatis.spring.annotation.MapperScan;   进口org.springframework.context.annotation.Bean;   进口org.springframework.context.annotation.Configuration;      @ configuration   @EnableTransactionManagement (proxyTargetClass=true)   公开课MybatisPlusConfig {/* *   * mybatis-plus分页插件& lt; br>   */@ bean   公共PaginationInterceptor PaginationInterceptor () {   PaginationInterceptor PaginationInterceptor=new PaginationInterceptor ();   返回paginationInterceptor;   }   }      

  

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

  

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

  

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

        公共类PageReq实现Serializable {/* *   *每页显示大小   */私人长尺寸;/* *   *当前页码   */私人长电流;/* *   *最大页数   */私人长maxCurrent;/* *   *数据总条数   */私人长总;      公共长getSize () {   返回大小;   }      (长尺寸){setSize公共空   这一点。大?大小;   }      公共长getCurrent () {   返回当前;   }      公共空间setCurrent(当前){   这一点。当前=当前;   }      公共长getMaxCurrent () {   返回maxCurrent;   }      公共空间setMaxCurrent(长maxCurrent) {   这一点。maxCurrent=maxCurrent;   }      公共长getTotal () {   返回总;   }      公共空间setTotal(长){   如果(大小!=0){   如果(总%大小!=0){   maxCurrent=总/尺寸+ 1;   其他}{   maxCurrent=总/尺寸;   }   }   }      公共PageReq () {      }      公共PageReq(长尺寸、电流、长总){   这一点。大?大小;   这一点。当前=当前;   这一点。总=总;   setTotal(总);   }   }      

功能编写:

  

 MyBatis +实现多表分页查询功能的示例代码”> <br/>
  <img src=

  

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

  

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

  

  

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

  

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

  

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

        进口com.baomidou.mybatisplus.extension.plugins.pagination.Page;   进口com.baomidou.mybatisplus.core.mapper.BaseMapper;   进口com.eiot.e_view.model.req.RoomPageReq;   进口com.eiot.e_view.model.vo.RoomVO;   进口org.apache.ibatis.annotations.Param;      进口并不知道;      公共接口RoomMapper延伸BaseMapper

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