(六)springboot + mybatis plus实现多表联查分页3

您所在的位置:网站首页 苞米豆mybatis (六)springboot + mybatis plus实现多表联查分页3

(六)springboot + mybatis plus实现多表联查分页3

2023-10-12 03:48| 来源: 网络整理| 查看: 265

(六)springboot + mybatis plus实现多表联查分页3.X版本

注明 : 上两篇文章我们讲解了springboot+mybatis-plus对于单表的CRUD和条件构造器的使用方法,但是对于我们的实战项目中多表联查也是经常会出现的。今天我们就来说下怎么在springboot+MP模式下实现多表联查并分页。

项目源码下载位置 | gitee

MP推荐使用的是一种苞米豆团队自己封装好的分页插件,也就是PaginationInterceptor分页拦截器,那么下面我们集成分页插件,如果在项目使用使用过程中出现任何问题,下载源码观看,可找到问题所在,如不能解决,可在下方博客留言,看到留言后会帮你解决问题。

1 配置分页插件 package com.lqf.multitable.config; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; @EnableTransactionManagement @Configuration @MapperScan("com.lqf.multitable.dao.*") public class MybatisPlusConfig { /** * mybatis-plus SQL执行效率插件【生产环境可以关闭】 */ @Bean public PerformanceInterceptor performanceInterceptor() { return new PerformanceInterceptor(); } /* * 分页插件,自动识别数据库类型 多租户,请参考官网【插件扩展】 */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } }

分页插件配置好后,需要在项目中自动生成各个层级代码,在这里我就不阐述自动生成的过程了,如果有不知道的童鞋可观看我MP第三篇博文。

由于在多表联查的情况下可能会出现返回不同表的字段,当自动生成的表不能满足你的返回条件时,需要我们自动生成一个返回实体。下面实体是包括用户表和角色表的两张返回实体。

2 创建返回实体 package com.lqf.multitable.bean.crm; import com.sun.corba.se.spi.presentation.rmi.IDLNameTranslator; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.time.LocalDateTime; /** * @author : lqf * @Description : * @date : Create in 18:14 2018/10/3 */ @Data @AllArgsConstructor @NoArgsConstructor public class UserRoleVo { private Long userId; /** * 创建时间 */ private LocalDateTime createTime; /** * 修改时间 */ private LocalDateTime updateTime; /** * 账号 */ private String username; /** * 密码 */ private String password; /** * 姓名 */ private String realname; /** * 性别(0为女 1为男) */ private Integer sex; /** * 手机号 */ private String mobile; /** * 密码加密串 */ private String passwordMd5; /** * 开账号人 */ private Long parentId; /** * 是否禁用 0否 1是 */ private Integer status; /** * 授权大区 */ private String authArea; /** * 授权城市 */ private String authCity; private Integer role; /** * 用户剩余卡数 */ private Integer residueCardNumber; /** * 最后登录时间 */ private LocalDateTime lastLoginTime; /** * 最后登录ip地址 */ private String lastLoginIp; /** * 最后登录次数 */ private Integer lastLoginCount; /** * 渠道 */ private String authChannel; /** * 0 外网 1 内网 */ private Integer internet; /** * 金币 */ private Long goldCoin; private Long id; /** * 状态 */ private String statusId; /** * 角色名 */ private String roleName; /** * 角色值 */ private String roleValue; /** * 能添加的下属角色值 */ private String addibleValue; } 3 测试Test package com.lqf.multitable; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.lqf.multitable.bean.crm.UserRoleVo; import com.lqf.multitable.service.crm.FyUserService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest public class SpringbootMybatisPlusMultiTableApplicationTests { @Autowired private FyUserService service; /** * 联表查询并分页 */ @Test public void contextLoads() { // 当前页,总条数 构造 page 对象 Page page = new Page(1, 10); page.setRecords(service.selectUserListPage(page)); System.out.println(page); } } 4 service层 package com.lqf.multitable.service.crm.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.lqf.multitable.bean.crm.FyUser; import com.lqf.multitable.bean.crm.UserRoleVo; import com.lqf.multitable.dao.crm.FyUserMapper; import com.lqf.multitable.service.crm.FyUserService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import java.util.List; /** *

* 服务实现类 *

* * @author lqf * @since 2018-10-02 */ @Service public class FyUserServiceImpl extends ServiceImpl implements FyUserService { @Override public List selectUserListPage(Page page) { return this.baseMapper.selectUserListPage(page); } }

注意这里的baseMapper不是你自己定义的,直接通过this.baseMapper调用就可以,这个是封装好的。

5mapper层 package com.lqf.multitable.dao.crm; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.lqf.multitable.bean.crm.FyUser; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.lqf.multitable.bean.crm.UserRoleVo; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import java.util.List; /** *

* Mapper 接口 *

* * @author lqf * @since 2018-10-02 */ @Repository public interface FyUserMapper extends BaseMapper { @Select("SELECT * FROM fy_user u LEFT JOIN fy_role r ON u.role = r.id") List selectUserListPage(Page pagination); }

上方代码我直接通过注解进行了sql查询,你也可以通过mapper.xml进行,这里无需设置分页条件,会自动进行sql拼接,这里要注意sql的结尾不要用;否自自动拼接limit无法完成

6 测试结果 ==> Preparing: SELECT COUNT(1) FROM fy_user u LEFT JOIN fy_role r ON u.role = r.id ==> Parameters: Parameters:


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3