MyBatis-Plus-join一张表连两次查询

具体业务需求是这样:用户有一个头像一个身份证照片都保存在附件表中,如果查询出来再用结合处理效率比低,考虑直接用连表的方式查询出来,使用两次连表的方式查询出来

MPJLambdaWrapper 实例化:

java
MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>();
在这一行中,我们创建了一个 MPJLambdaWrapper 对象,并指定了泛型为 User,这意味着我们将使用该对象来构建对 User 表的查询条件。

添加查询条件:

wrapper.eq(User::getName, "John");

这一行代码调用了 MPJLambdaWrapper 对象的 eq() 方法,添加了一个等于条件,即查询用户名为 “John” 的用户。

连表查询:

wrapper.leftJoin(UserAddress.class, 
    (on, address) -> on.eq(User::getId, address::getUserId)
    .selectAs(UserAddress::getFileUrl, User::getUserCover)
);

这一部分是进行连表查询的关键。我们调用了 MPJLambdaWrapper 对象的 leftJoin() 方法,并传入了两个参数:

第一个参数是需要连接的表,这里是 UserAddress.class,表示我们要将 User 表与 UserAddress 表进行连接。
第二个参数是一个 Lambda 表达式,用于指定连接条件和子查询。在这个 Lambda 表达式中:
(on, address) 表示连接条件对象和 UserAddress 表的别名。
on.eq(User::getId, address::getUserId) 指定了连接条件,即 User 表的 id 字段等于 UserAddress 表的 userId 字段。
.selectAs(UserAddress::getFileUrl, User::getUserCover) 则是一个子查询,将 UserAddress 表中的文件 URL 字段映射到 User 表的用户封面字段。
执行查询:

List<User> userList = userMapper.selectList(wrapper);

最后,我们将构建好的 MPJLambdaWrapper 对象作为参数传递给 MyBatis-Plus 的查询方法 selectList(),以执行查询并获取符合条件的用户列表。

通过这段代码,我们实现了一个包含连表查询和条件查询的功能,并且使用了 MPJLambdaWrapper 和 MyBatis-Plus 的相关方法来简化代码编写和提高可读性。

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-Plus是一个基于MyBatis的增强工具,它提供了很多便捷的功能来简化开发。在MyBatis-Plus中,实现连查询可以通过使用Wrapper(条件构造器)来实现。 下面是使用MyBatis-Plus实现连查询的步骤: 1. 创建Wrapper对象:使用QueryWrapper或者LambdaQueryWrapper来创建一个Wrapper对象,用于构建查询条件。 2. 设置关联:通过调用Wrapper对象的join方法,传入关联名和关联条件,来设置关联。 3. 执行查询:通过调用MyBatis-Plus提供的selectList或者selectPage方法,传入Wrapper对象作为参数,来执行查询操作。 下面是一个示例代码,演示如何使用MyBatis-Plus实现连查询: ```java // 创建Wrapper对象 QueryWrapper<User> wrapper = new QueryWrapper<>(); // 设置关联 wrapper.join("user_role", "user_role.user_id = user.id") .join("role", "role.id = user_role.role_id") .select("user.id", "user.name", "role.name as roleName"); // 执行查询 List<Map<String, Object>> userList = userMapper.selectMaps(wrapper); ``` 在上面的示例中,我们创建了一个QueryWrapper对象,并通过join方法设置了两个关联:user_role和role。然后通过select方法指定了需要查询的字段。最后调用selectMaps方法执行查询,并将结果以List<Map<String, Object>>的形式返回。 注意:这里使用了selectMaps方法来返回结果,可以得到一个包含多个Map对象的List,每个Map对象示一条查询结果,其中key为字段名,value为字段值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值