写一个mybatis-plus多表联查的例子
时间: 2023-11-17 20:01:19 浏览: 76
假设我们有两张表,一张是用户表(user),另一张是角色表(role),它们之间有一对多的关系,即一个用户可以拥有多个角色。
我们需要查询出所有用户及其对应的角色信息,可以使用mybatis-plus的wrapper进行多表联查。
首先,我们创建一个UserVO类,用于存放查询结果:
```
public class UserVO {
private Long id;
private String name;
private List<Role> roles;
// 省略getter和setter
}
```
接下来,我们创建一个Mapper接口,定义查询方法:
```
public interface UserMapper extends BaseMapper<User> {
List<UserVO> selectUserWithRoles();
}
```
在Mapper接口中,我们使用@Select注解定义查询语句,使用@Results注解定义结果映射关系。
```
@Select("SELECT u.id, u.name, 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")
@Results({
@Result(column = "id", property = "id"),
@Result(column = "name", property = "name"),
@Result(column = "id", property = "roles",
many = @Many(select = "com.example.mapper.RoleMapper.selectById"))
})
List<UserVO> selectUserWithRoles();
```
在查询语句中,我们使用左连接查询user表、user_role表和role表。在结果映射中,我们使用@Many注解定义roles属性与RoleMapper接口中的selectById方法关联。
最后,在RoleMapper接口中添加selectById方法,用于根据角色id查询角色信息。
```
public interface RoleMapper extends BaseMapper<Role> {
Role selectById(Long id);
}
```
这样,我们就完成了多表联查的操作,可以使用UserMapper接口中的selectUserWithRoles方法查询所有用户及其对应的角色信息。
阅读全文