MyBatis Plus 实现多表分页查询功能的示例代码
在MybatisPlus中,虽然IService接口帮我们定义了很多常用的方法,但这些都是T对象有用,如果涉及到多表的查询,还是需要自定义Vo对象和自己编写sql语句,MybatisPlus提供了一个Page对象,查询是需要设置其中的size字段和current字段的值
一、分页配置
可以直接使用selectPage这样的分页,但返回的数据确实是分页后的数据,但在控制台打印的SQL语句其实并没有真正的物理分页,而是通过缓存来获得全部数据中再进行的分页,这样对于大数据量操作时是不可取的,那么接下来就叙述一下,真正实现物理分页的方法。
官方在分页插件上如是描述:自定义查询语句分页(自己写sql/mapper),也就是针对自己在Mapper中写的方法,但经过测试,如果不配置分页插件,其默认采用的分页为RowBounds的分页即逻辑分页,也就是先把数据记录全部查询出来,然在再根据offset和limit截断记录返回(数据量大的时候会造成内存溢出),故而不可取,而通过分页插件的配置即可达到物理分页效果。
新建一个MybatisPlusConfig配置类文件,代码如下所示:
importcom.baomidou.mybatisplus.plugins.PaginationInterceptor; importorg.mybatis.spring.annotation.MapperScan; importorg.springframework.context.annotation.Bean; importorg.springframework.context.annotation.Configuration; @Configuration @EnableTransactionManagement(proxyTargetClass=true) publicclassMybatisPlusConfig{ /** *mybatis-plus分页插件
*/ @Bean publicPaginationInterceptorpaginationInterceptor(){ PaginationInterceptorpaginationInterceptor=newPaginationInterceptor(); returnpaginationInterceptor; } }
二、使用分页进行单表的查询
对于单表的分页查询,ServiceImpl类已经为我们提供了对应的方法selectPage(),并将结果封装到Page对象中:
在项目开发当中,都会将分页的一些参数封装成一个类PageReq(不要在意这个Req为什么不是全大写)->importjava.io.Serializable;
publicclassPageReqimplementsSerializable{ /** *每页显示大小 */ privatelongsize; /** *当前页码 */ privatelongcurrent; /** *最大页数 */ privatelongmaxCurrent; /** *数据总条数 */ privatelongtotal; publiclonggetSize(){ returnsize; } publicvoidsetSize(longsize){ this.size=size; } publiclonggetCurrent(){ returncurrent; } publicvoidsetCurrent(longcurrent){ this.current=current; } publiclonggetMaxCurrent(){ returnmaxCurrent; } publicvoidsetMaxCurrent(longmaxCurrent){ this.maxCurrent=maxCurrent; } publiclonggetTotal(){ returntotal; } publicvoidsetTotal(longtotal){ if(size!=0){ if(total%size!=0){ maxCurrent=total/size+1; }else{ maxCurrent=total/size; } } } publicPageReq(){ } publicPageReq(longsize,longcurrent,longtotal){ this.size=size; this.current=current; this.total=total; setTotal(total); } }
功能编写:
三、多表关联分页查询
对于多表关联的查询时,还是需要编写VO类和手动的在Mapper.xml中编写sql,虽然是可以不用创建VO,用Map的方式接受返回的结果,但这样只会更麻烦,甚至VO是很有可能在其他地方使用的
先准备个VO类:
编写Mapper接口,添加一个分页查询的方法
packagecom.eiot.e_view.mapper;
importcom.baomidou.mybatisplus.extension.plugins.pagination.Page; importcom.baomidou.mybatisplus.core.mapper.BaseMapper; importcom.eiot.e_view.model.req.RoomPageReq; importcom.eiot.e_view.model.vo.RoomVO; importorg.apache.ibatis.annotations.Param; importjava.util.List; publicinterfaceRoomMapperextendsBaseMapper{ List getRoomPageList(Pagepage,@Param("roomPageReq")RoomPageReqroomPageReq); }
编写sql,和我们使用Mybatis没有区别:
编写Server:
执行结果:
总结
到此这篇关于MyBatisPlus实现多表分页查询功能的示例代码的文章就介绍到这了,更多相关MyBatisPlus多表分页查询内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。