前言
先声明:苞米豆(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; //返回结果
}
}