Mybatis-Plus 多表联查分页的实现代码
上一节,简单讲述了Mybatis-Plus搭建与使用入门,这一节,简单讲一下如何使用MP实现多表分页。
分析
使用的工程,依旧是spring-boot,关于分页,官网给出了一个单表的demo,其实多表分页实现原理相同,都是通过mybatis的拦截器
(拦截器做了什么?他会在你的sql执行之前,为你做一些事情,例如分页,我们使用了MP不用关心limit,拦截器为我们拼接。我们也不用关心总条数,拦截器获取到我们sql后,拼接selectcount(*)为我们查询总条数,添加到参数对象中)。
实现
1.配置拦截器
@EnableTransactionManagement @Configuration @MapperScan("com.web.member.mapper") publicclassMybatisPlusConfig{ /** *mybatis-plusSQL执行效率插件【生产环境可以关闭】 */ @Bean publicPerformanceInterceptorperformanceInterceptor(){ returnnewPerformanceInterceptor(); } /* *分页插件,自动识别数据库类型多租户,请参考官网【插件扩展】 */ @Bean publicPaginationInterceptorpaginationInterceptor(){ returnnewPaginationInterceptor(); } }
2.mapper接口以及xml
/** **用户表Mapper接口 *
* *@author殷天文 *@since2018-06-01 */ publicinterfaceUserMapperextendsBaseMapper{ List selectUserListPage(Paginationpage,@Param("user")UserListBeanuser); }
这里要注意的是,这个Paginationpage是必须要有的,否则MP无法为你实现分页。
SELECT * FROM ftms_useru LEFTJOINftms_user_levellONu.level_id=l.id WHERE1=1 andu.nicknamelike"%"#{user.nickname}"%"
3.service实现
importcom.web.member.beans.admin.UserListBean; importcom.web.member.entity.User; importcom.web.member.mapper.UserMapper; importcom.web.member.model.UserListModel; importcom.web.member.service.UserService; importcom.baomidou.mybatisplus.plugins.Page; importcom.baomidou.mybatisplus.service.impl.ServiceImpl; importorg.springframework.stereotype.Service; importorg.springframework.transaction.annotation.Transactional; /** **用户表服务实现类 *
* *@author殷天文 *@since2018-06-01 */ @Service publicclassUserServiceImplextendsServiceImplimplementsUserService{ @Transactional(readOnly=true) @Override publicPage selectUserListPage(UserListBeanuser){ Page page=newPage<>(user.getCurr(),user.getNums());//当前页,总条数构造page对象 returnpage.setRecords(this.baseMapper.selectUserListPage(page,user)); } }
最后将结果集set到page对象中,page对象的json结构如下
{ "total":48,//总记录 "size":10,//每页显示多少条 "current":1,//当前页 "records":[//结果集数组 {...}, {...}, {...}, ... ], "pages":5//总页数 }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。