mybatisPlus中selectPage方法中在已有的单表分页查询中关联子表进行过滤,该怎么实现
时间: 2024-03-09 18:45:53 浏览: 141
在 MyBatis-Plus 中,可以使用 `selectPage` 方法和 `QueryWrapper` 对象进行单表分页查询,同时可以通过 `QueryWrapper` 对象的 `inSql` 方法实现关联子表进行过滤。
例如,我们有两个实体类 `User` 和 `UserRole`,它们之间是一对多的关系,即一个用户可以拥有多个角色。现在我们要查询年龄为 18 岁的用户,并且这些用户的角色在某个指定的列表中。
可以使用如下代码实现:
```java
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 18);
queryWrapper.inSql("id", "select user_id from user_role where role_id in (1, 2, 3)");
IPage<User> userPage = userMapper.selectPage(new Page<>(1, 10), queryWrapper);
```
在上面的代码中,我们通过 `eq` 方法设置了年龄为 18 岁的条件,然后通过 `inSql` 方法设置了一个子查询,该子查询的结果为拥有角色为 1、2 或 3 的用户 ID。这样,最终查询的结果就是符合条件的年龄为 18 岁且角色为 1、2 或 3 的用户,并且使用了分页查询。
需要注意的是,`inSql` 方法中的 SQL 语句必须使用标准的 SQL 语法,并且不能包含 ORDER BY 子句和 LIMIT 子句。如果需要使用 ORDER BY 或 LIMIT,可以将 SQL 语句封装成一个子查询。同时,为了防止 SQL 注入攻击,建议使用 `inSql` 方法代替 `in` 方法。
阅读全文