mybatis-plus的连表查询
时间: 2023-09-21 17:06:52 浏览: 93
mybatis-plus-join-master.zip
Mybatis-Plus 提供了两种方式进行多表联查:
1. 使用注解 @TableName 和 @TableField 进行关联映射
这种方式适用于实体类之间存在关联关系的情况,比如一对一、一对多、多对多等。通过注解 @TableField 可以指定当前字段与数据库表中的哪个字段进行映射,而 @TableName 则可以指定当前实体类与哪个数据库表进行映射。示例代码如下:
```java
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@TableField(exist = false)
private List<Role> roles;
}
@TableName("role")
public class Role {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
@TableField(exist = false)
private List<User> users;
}
public interface UserMapper extends BaseMapper<User> {
@Select("select u.*, r.id as rid, r.name as rname from user u left join user_role ur on u.id = ur.user_id left join role r on ur.role_id = r.id where u.id = #{id}")
User selectUserWithRole(@Param("id") Long id);
}
```
2. 使用 Mybatis-Plus 提供的 QueryWrapper 进行条件构造
这种方式适用于实体类之间不存在关联关系的情况,我们可以使用 QueryWrapper 来构造 SQL 语句。示例代码如下:
```java
public interface UserMapper extends BaseMapper<User> {
@Select("select u.*, r.id as rid, r.name as rname from user u left join user_role ur on u.id = ur.user_id left join role r on ur.role_id = r.id ${ew.customSqlSegment}")
List<User> selectUserAndRoleList(@Param(Constants.WRAPPER) Wrapper<User> wrapper);
}
@Test
public void testSelectUserAndRoleList() {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("user.*", "role.id as rid", "role.name as rname")
.leftJoin("user_role").on("user.id = user_role.user_id")
.leftJoin("role").on("user_role.role_id = role.id")
.eq("user.id", 1);
List<User> list = userMapper.selectUserAndRoleList(wrapper);
list.forEach(System.out::println);
}
```
以上是 Mybatis-Plus 进行多表联查的两种方式,具体使用哪种方式取决于实际情况。
阅读全文