是的,MyBatis-Plus(简称MP)可以进行多表的联合查询。
MP 提供了多种实现联表查询的方法,包括:
- Wrapper 联表查询:通过
Wrapper、QueryWrapper、LambdaQueryWrapper、UpdateWrapper等构建多表查询条件,实现联表查询。 - Join 方法联表查询:通过
join方法实现多表联查。MP 的join方法可以链式调用,支持多表连接查询。 - 实体注解联表查询:通过在实体类中添加
@TableName、@TableField等注解,自动生成 SQL 语句进行联表查询。 - 自定义 SQL 联表查询:通过
@SelectProvider、@UpdateProvider、@InsertProvider等注解,实现自定义的 SQL 语句进行联表查询。
其中,Wrapper 联表查询是 MP 最常用的方法之一。通过 Wrapper 等构建多表查询条件,可以实现复杂的联表查询,同时也支持动态生成查询条件,非常灵活。
例如,通过 Wrapper 实现两张表的联表查询:
Wrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("user_id", 1)
.nested(i -> i.eq("age", 20).or().eq("name", "Jack"))
.inSql("dept_id", "select dept_id from dept where dept_name like '%IT%'")
.orderByDesc("create_time");
List<User> userList = userMapper.selectList(wrapper);
上面的代码中,通过 QueryWrapper 构建联表查询条件,查询 user 表和 dept 表,查询条件包括:user_id 等于 1、age 等于 20 或 name 等于 "Jack"、dept_id 在子查询结果中、按照 create_time 降序排序。