MybatisPlus のページングの落とし穴
ページングに関しては、MybatisPlus は、ページング パラメーターを返すのを容易にするために、IPage 受信値を提供します。
具体的な形式は次のとおりです。
{
...}, # 返回的数据
"total": 81, # 总数据量
"size": 10, # 每页多少数据
"current": 1, # 当前页
"orders": [], # 获取排序信息,排序的字段和正反序
"optimizeCountSql": true, # 自动优化
"searchCount": true, # 进行 count 查询
"countId": null, # 老分页插件不支持
"maxLimit": null, # 最大每页分页数限制
"pages": 9 # 总页数
まず、私が遭遇した問題を見てみましょう。
これら 2 つの図から、2 番目の SQL を実行した後、前の SQL のデータが直接クリアされたことがわかります。後で、それがページの問題であることがわかりました。同じページ パラメータを共有できなかったため、前のパラメータが発生しました。データは直接クリアされます
解決
1. 各 SQL は独自のページを使用します
#例如第一个sql
Page<SysAppRoleAuth> page = new Page<>(pageNo, pageSize);
IPage<SysAppRoleAuth> roleAuthList = appRoleAuthMapper.selectByRoleId(page,id);
#第二个sql
Page<SysAppRoleAuth> page1 = new Page<>(pageNo, pageSize);
IPage<SysAppRoleAuth> list = appRoleAuthMapper.selectAuthModule(page1,id);
2. SQL の 1 つをリストやセットなどの他の形式に返します。
//判断角色是否存在
Page<SysAppRoleAuth> page = new Page<>(pageNo, pageSize);
List<SysAppRoleAuth> roleAuthList = appRoleAuthMapper.selectByRoleId(id);
if (roleAuthList.size() == 0) {
return Result.error("角色不存在");
}
//查询有权限的模块
IPage<SysAppRoleAuth> list = appRoleAuthMapper.selectAuthModule(page,id);