mybatisplus多表查询
时间: 2023-09-05 07:08:42 浏览: 80
Mybatis-Plus支持多表查询,可以使用Mapper.xml文件中的SQL语句或者注解方式实现。
1. 使用Mapper.xml文件进行多表查询
在Mapper.xml文件中,可以使用select标签定义一个多表查询的SQL语句,例如:
```xml
<select id="selectUserAndRole" resultMap="userRoleMap">
SELECT u.*, r.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
</select>
```
在这个例子中,我们使用了LEFT JOIN语句,将user表和user_role表以及role表进行了关联查询,查询结果包含了user表的所有字段以及role表的role_name字段。
2. 使用注解方式进行多表查询
Mybatis-Plus还支持使用注解方式进行多表查询。例如,我们可以使用@Many注解来实现一个多表查询,例如:
```java
public class User {
@TableField(exist = false)
private List<Role> roles;
}
public class Role {
private Long id;
private String roleName;
}
@Mapper
public interface UserMapper extends BaseMapper<User> {
@Select("SELECT r.* FROM role r LEFT JOIN user_role ur ON ur.role_id = r.id WHERE ur.user_id = #{userId}")
@Results({
@Result(column="id", property="id"),
@Result(column="role_name", property="roleName")
})
List<Role> selectRolesByUserId(Long userId);
}
```
在这个例子中,我们定义了一个User类和一个Role类,User类中使用了@TableField注解,并指定exist = false,表示该字段不是数据表中的一个列,而是我们后续查询所需要的一个对象。
然后我们在UserMapper中定义了一个selectRolesByUserId方法,使用@Select注解指定了一个SQL语句,使用@Results注解定义了一个映射关系,最终查询结果会将查询到的Role对象封装到User对象的roles字段中。
以上就是Mybatis-Plus多表查询的两种实现方式,可以根据具体的业务需求选择不同的方式进行实现。
阅读全文