mybatisplus关联表查询
时间: 2023-06-29 11:06:25 浏览: 342
Mybatis-plus 提供了多种关联表查询的方式,下面介绍两种常用的方式。
1. 嵌套查询
嵌套查询是指在一个mapper.xml文件中编写多个select语句,通过嵌套的方式实现多表关联查询。例如:
```
<select id="getUserWithRole" resultMap="userResultMap">
SELECT u.*, r.name as role_name
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}
</select>
```
上面的查询语句中,使用了LEFT JOIN关联了三张表,通过别名的方式将role表的name字段映射到user表的结果集中。
2. @TableField注解
@TableField注解是Mybatis-plus提供的一种简单的关联表查询方式,可以在实体类的字段上标记注解,实现一对一、一对多、多对多等关联查询。例如:
```
@Data
public class User {
private Long id;
private String name;
private Integer age;
@TableField(exist = false)
private List<Role> roles;
}
@Data
public class Role {
private Long id;
private String name;
}
// mapper.xml中查询语句
<select id="getUserWithRoleByAnnotation" resultMap="userResultMap">
SELECT u.*, r.id as role_id, r.name as role_name
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}
</select>
// UserServiceImpl中调用
@Override
public User getUserWithRoleByAnnotation(Long id) {
User user = userMapper.selectById(id);
List<Role> roles = roleMapper.selectList(
new QueryWrapper<Role>().inSql("id", "SELECT role_id FROM user_role WHERE user_id=" + id));
user.setRoles(roles);
return user;
}
```
上面的示例中,通过@TableField注解将List<Role>类型的roles字段映射到了user表的结果集中。在查询时,使用inSql函数查询关联表的数据,并将结果集设置到user对象中返回。
阅读全文