public List<User> selectUsers(Integer role, PageSort page) { log.info("批量查询用户信息,查询的角色权限:" + role); List<User> usersList = new ArrayList<User>(); int offset = (page.getPageNum() - 1) * page.getPageSize(); int limit = page.getPageSize(); userInfoMapper.selectByRoleAndPage(role, new RowBounds(offset, limit)); RowBounds rowBounds = new RowBounds(offset, limit); List<User> userList = userInfoMapper.selectByRoleAndPage(role, rowBounds); return usersList; } @SelectProvider(type = UserSqlProvider.class, method = "selectByRoleAndPage") List<User> selectByRoleAndPage(@Param("role") Integer role, RowBounds rowBounds); public class UserSqlProvider { public String selectByRoleAndPage(Integer role, RowBounds rowBounds) { String sql = "SELECT * FROM user WHERE 1=1"; if (role != -1) { sql += " AND role = #{role}"; } sql += " LIMIT #{offset}, #{limit}"; return sql; } } 报错Error invoking SqlProvider method (com.ruifan.taihaolian.biz.mapper.provider.UserSqlProvider.selectByRoleAndPage). Cause: java.lang.IllegalArgumentException: wrong number of arguments
时间: 2024-03-17 14:41:20 浏览: 45
这个错误可能是因为在 `UserSqlProvider` 类中的 `selectByRoleAndPage` 方法声明了两个参数 `role` 和 `RowBounds`,但在 SQL 语句中只传入了一个参数 `role`,没有传入 `RowBounds` 参数。因此,需要将 SQL 语句中的 `LIMIT #{offset}, #{limit}` 替换为 `LIMIT #{1.offset}, #{1.limit}`,表示使用第二个参数 `RowBounds` 的 `offset` 和 `limit` 属性来限制查询结果集。修改后的代码如下所示:
```java
public class UserSqlProvider {
public String selectByRoleAndPage(Integer role, RowBounds rowBounds) {
String sql = "SELECT * FROM user WHERE 1=1";
if (role != -1) {
sql += " AND role = #{0}";
}
sql += " LIMIT #{1.offset}, #{1.limit}";
return sql;
}
}
```
另外,在 `selectUsers` 方法中,代码存在一些问题,`userInfoMapper.selectByRoleAndPage(role, new RowBounds(offset, limit));` 这行代码没有将查询结果保存到 userList 中,应该删除。修改后的代码如下所示:
```java
public List<User> selectUsers(Integer role, PageSort page) {
log.info("批量查询用户信息,查询的角色权限:" + role);
int offset = (page.getPageNum() - 1) * page.getPageSize();
int limit = page.getPageSize();
RowBounds rowBounds = new RowBounds(offset, limit);
List<User> userList = userInfoMapper.selectByRoleAndPage(role, rowBounds);
return userList;
}
```
这样就可以正确地查询出符合条件的用户列表了。
阅读全文