MyBatisPlus的join联表查询(MPJBaseMapper)

添加pom依赖

<!--MPJ-->
        <dependency>
            <groupId>com.github.yulichang</groupId>
            <artifactId>mybatis-plus-join</artifactId>
            <version>1.2.4</version>
        </dependency>

Mapper层由继承BaseMapper改为MPJBaseMapper

实际操作:

class test {
    @Resource
    private UserMapper userMapper;

    void testJoin() {
        List<UserDTO> list = userMapper.selectJoinList(UserDTO.class,
                new MPJLambdaWrapper<UserDO>()
                        .selectAll(UserDO.class)
                        .select(UserAddressDO::getTel)
                        .selectAs(UserAddressDO::getAddress, UserDTO::getUserAddress)
                        .select(AreaDO::getProvince, AreaDO::getCity)
                        .leftJoin(UserAddressDO.class, UserAddressDO::getUserId, UserDO::getId)
                        .leftJoin(AreaDO.class, AreaDO::getId, UserAddressDO::getAreaId)
                        .eq(UserDO::getId, 1)
                        .like(UserAddressDO::getTel, "1")
                        .gt(UserDO::getId, 5));
    }
}

对应sql

SELECT 
    t.id,
    t.name,
    t.sex,
    t.head_img,
    t1.tel,
    t1.address AS userAddress,
    t2.province,
    t2.city 
FROM 
    user t 
    LEFT JOIN user_address t1 ON t1.user_id = t.id 
    LEFT JOIN area t2 ON t2.id = t1.area_id 
WHERE (
    t.id = ? 
    AND t1.tel LIKE ? 
    AND t.id > ?)

说明:

  • UserDTO.class 查询结果返回类(resultType)

  • selectAll() 查询指定实体类的全部字段

  • select() 查询指定的字段,支持可变参数,同一个select只能查询相同表的字段

  • 故将UserAddressDO和AreaDO分开为两个select()

  • selectAs() 字段别名查询,用于数据库字段与业务实体类属性名不一致时使用

  • leftJoin() 参数说明

  • 第一个参数: 参与连表的实体类class

  • 第二个参数: 连表的ON字段,这个属性必须是第一个参数实体类的属性

  • 第三个参数: 参与连表的ON的另一个实体类属性

  • 默认主表别名是t,其他的表别名以先后调用的顺序使用t1,t2,t3…

  • 条件查询,可以查询主表以及参与连接的所有表的字段,全部调用mp原生的方法,正常使用没有sql注入风险

分页查询


    @GetMapping(value = "/list")
    public Result<IPage<BjdbcTerminationApplication>> queryPageList(BjdbcTerminationApplication bjdbcTerminationApplication,
                                   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
                                   HttpServletRequest req) {
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        AgencyManagement organName = agencyManagementService.getOrganName(user.getUsername());   //该用户的部门信息
        Page<BjdbcTerminationApplication> page = new Page<BjdbcTerminationApplication>(pageNo, pageSize);
        IPage<BjdbcTerminationApplication>pageList = bjdbcTerminationApplicationMapper.selectJoinPage(
                page,
                BjdbcTerminationApplication.class,
                new MPJLambdaWrapper<>()
                .selectAll(BjdbcTerminationApplication.class)
                .selectAs(SysUser::getRealname,BjdbcTerminationApplication::getRealname)
                .selectAs(AgencyManagement::getOrganName,BjdbcTerminationApplication::getOrganName)
                .selectAs(AgencyManagement::getCompanyCode,BjdbcTerminationApplication::getCompanyCode)
                .leftJoin(SysUser.class,SysUser::getUsername,BjdbcTerminationApplication::getApplicantZh)
                .leftJoin(AgencyManagement.class,AgencyManagement::getId,BjdbcTerminationApplication::getAgencyName)
                .eq(!organName.getLevel().equals("1"),AgencyManagement::getId,organName.getId())
                .ge(StringUtils.isNotEmpty(bjdbcTerminationApplication.getApplyStartTime()),BjdbcTerminationApplication::getCreateTime,bjdbcTerminationApplication.getApplyStartTime())
                .le(StringUtils.isNotEmpty(bjdbcTerminationApplication.getApplyEndTime()),BjdbcTerminationApplication::getCreateTime,bjdbcTerminationApplication.getApplyEndTime())
                //只查看当前部门数据
//                .eq(StringUtils.isNotEmpty(bjdbcTerminationApplication.getAgencyId()),BjdbcTerminationApplication::getAgencyId,bjdbcTerminationApplication.getAgencyId())
                //经办机构名称模糊查询
                .like(StringUtils.isNotEmpty(bjdbcTerminationApplication.getOrganName()),AgencyManagement::getOrganName,bjdbcTerminationApplication.getOrganName())
                .like(StringUtils.isNotEmpty(bjdbcTerminationApplication.getUnitNo()),BjdbcTerminationApplication::getUnitNo,bjdbcTerminationApplication.getUnitNo())
                .eq(StringUtils.isNotEmpty(bjdbcTerminationApplication.getApprovalStatus()),BjdbcTerminationApplication::getApprovalStatus,bjdbcTerminationApplication.getApprovalStatus())
                .orderByDesc(BjdbcTerminationApplication :: getCreateTime)
        );
        return Result.OK(pageList);
    }

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值