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元

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

抵扣说明:

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

余额充值