【605、mp可以做多表的联合查询吗】

532 阅读1分钟

是的,MyBatis-Plus(简称MP)可以进行多表的联合查询。

MP 提供了多种实现联表查询的方法,包括:

  1. Wrapper 联表查询:通过 WrapperQueryWrapperLambdaQueryWrapperUpdateWrapper 等构建多表查询条件,实现联表查询。
  2. Join 方法联表查询:通过 join 方法实现多表联查。MP 的 join 方法可以链式调用,支持多表连接查询。
  3. 实体注解联表查询:通过在实体类中添加 @TableName@TableField 等注解,自动生成 SQL 语句进行联表查询。
  4. 自定义 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 降序排序。