以下是一些使用 QueryWrapper 实现多表操作的例子:1. 多表关联查询
```java
// User 和 Role 是多对多关系,使用中间表 user_role
public List<User> getUserListByRoleId(Integer roleId) {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("user.*").distinct()
.from("user")
.leftJoin("user_role").on("user.id=user_role.user_id")
.eq("user_role.role_id", roleId);
return userMapper.selectList(wrapper);
}
```
上面的代码实现了查询拥有指定 roleId 的所有用户信息。
2. 多表关联查询并排序
```java
public List<User> getUserListOrderByRoleName() {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("user.*").distinct()
.from("user")
.leftJoin("user_role").on("user.id=user_role.user_id")
.leftJoin("role").on("user_role.role_id=role.id")
.orderByAsc("role.name");
return userMapper.selectList(wrapper);
}
```
上面的代码实现了查询所有用户信息,并按照角色名称升序排序。
3. 多表关联查询并分页
```java
public IPage<User> getUserListByPage(Integer roleId, Integer pageNum, Integer pageSize) {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("user.*").distinct()
.from("user")
.leftJoin("user_role").on("user.id=user_role.user_id")
.eq("user_role.role_id", roleId);
Page<User> page = new Page<>(pageNum, pageSize);
return userMapper.selectPage(page, wrapper);
}
```
上面的代码实现了查询拥有指定 roleId 的所有用户信息,并进行分页处理。
4. 多表关联查询并统计结果
```java
public Integer getUserCountByRoleId(Integer roleId) {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("count(distinct user.id) as count")
.from("user")
.leftJoin("user_role").on("user.id=user_role.user_id")
.eq("user_role.role_id", roleId);
Map<String, Object> map = userMapper.selectMaps(wrapper).get(0);
return Integer.parseInt(map.get("count