mybatis-plus联查JOIN版

前言 

先声明:苞米豆(mybatis-plus的公司)是否认有mybatis-plus-join的,这个join版是网上的大佬为了解决mybatis-plus不能联查的痛病,给我们提供了join联查,方便大家。

JOIN连表查询就跟在sql语句里写join联查是一样的,所以如果你构建的是物联网工程,都会尽可能的避免join联查,不要以为这个join联查,能像stream流一样提高查询的性能,他跟sql语句的join联查是一样的,如果数据量大,查询效率一样会非常低,这样会导致用户体验极差,所以学习mybatis-plus-join其实就当做学到一种新技术站点,或者说在面试的过程,你能拓展的讲些东西出来。如果想学习stream流,后续会更新。

依赖

在原有的依赖上加上

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

首先

创建一个DTO RES 作为要连接的表字

第二

修改原有的Mapper层 将继承的BaseMapper<Object> 修改成 MPJBaseMapper<Object>

public interface UserMapper extends MPJBaseMapper<User> {
}

实现代码

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {


    @Resource
    private UserMapper userMapper; //调用Mapper


    @Override
    public List<UserRes> findAll() {
        MPJLambdaWrapper<User> wrapper = new MPJLambdaWrapper<>(); //创建wrapper条件
        List<UserRes> userRes = userMapper.selectJoinList(UserRes.class,
                wrapper.selectAll(User.class) //主表设了查询所有字段
                        .select(Clazz::getClazzName) //相当于你要查询的字段
                        .leftJoin(Clazz.class, Clazz::getClazzId, User::getClazzId) //left join 外键跟主键连接
        );
        return userRes; //返回结果
    }
}

表结构

返回结果

Mybatis-Plus 中进行多表联查时,可以使用 `@TableField` 注解指定要查询的字段,并在实体类中定义对应的属性。 假设我们有两张表:`user` 表和 `order` 表,它们的关系是一对多,一个用户可以拥有多个订单。现在我们需要查询用户的信息和他的订单总数,然后将订单总数更新到用户表中的一个字段中。 首先,定义一个实体类 `User`,并在其中添加一个属性 `orderCount`,用来存储订单总数: ``` @Data public class User { private Long id; private String name; private Integer age; @TableField(exist = false) private Integer orderCount; // 订单总数 } ``` 其中,`@TableField(exist = false)` 表示该属性不是数据库表中的字段。 然后,使用 Mybatis-Plus 提供的 `Wrapper` 类进行多表联查,并计算订单总数: ``` QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.select("user.*, COUNT(order.id) as order_count") .eq("user.id", userId) .leftJoin("order", "user.id=order.user_id") .groupBy("user.id"); User user = userMapper.selectOne(wrapper); if (user != null) { user.setOrderCount(orderCount); userMapper.updateById(user); } ``` 在 `wrapper.select()` 方法中,我们使用了 SQL 的聚合函数 `COUNT()` 来计算订单总数,并使用 `as` 关键字给计算结果取了一个别名 `order_count`。然后,在 `wrapper.leftJoin()` 方法中,指定了要联查的表和联查条件。最后,在 `wrapper.groupBy()` 方法中,指定了分组条件。 查询出用户信息后,将订单总数设置到 `User` 对象中,并使用 `userMapper.updateById()` 方法将修改后的数据更新到数据库中。 以上就是使用 Mybatis-Plus 进行多表联查并修改字段的方法。注意,这里的 `orderCount` 属性不是数据库表中的字段,因此需要使用 `@TableField(exist = false)` 注解标识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值