基于 MyBatis Plus 实现 TrainBook 数据分页查询
以下是使用 MyBatis Plus 实现 TrainBook 数据分页查询的代码示例,该示例包含根据不同条件查询不同类型数据的代码:
BsPage<TrainBook> bsPage = new BsPage<>(page, rows);
QueryWrapper<TrainBook> wrapper = new QueryWrapper<>();
// 如果 bookName、bookCode 或 typeId 不为空,则查询符合条件的叶子节点并进行分页
if (Str.isNotEmpty(bookName) || Str.isNotEmpty(bookCode) || Str.isNotEmpty(typeId)) {
wrapper.ne('id', StringPool.ROOT);
wrapper.like(Str.isNotEmpty(bookName), 'book_name', bookName);
wrapper.like(Str.isNotEmpty(bookCode), 'book_code', bookCode);
wrapper.eq('type_id', typeId);
wrapper.orderByAsc('sort');
bsPage = baseMapper.selectPage(bsPage, wrapper);
} else {
// 查询 typeId 对应的根节点
wrapper.eq('type_id', typeId);
List<TrainBook> roots = baseMapper.selectPage(bsPage, wrapper).getRecords();
// 2. 依据 tenant_id 查询子节点
// List<SysBook> result = queryChildOrgByTenantId(roots);
// bsPage.setRecords(result);
}
return bsPage;
这段代码展示了根据不同的查询条件进行数据查询的逻辑,可以根据实际需求进行调整。
可能的修改代码:
- 如果需要查询 typeId 对应的所有节点,包括非叶子节点,则需要注释掉第 10 行的条件语句:
//wrapper.ne('id', StringPool.ROOT);
- 如果需要查询 typeId 对应的所有节点,不分根节点和叶子节点,则需要注释掉第 11、12 行的条件语句:
//wrapper.eq('parent_id', StringPool.ROOT);
//wrapper.orderByAsc('sort');
- 如果需要查询 typeId 对应的所有节点,并按照树形结构进行排序,则需要使用递归查询:
private List<TrainBook> queryChildNodes(String parentId) {
QueryWrapper<TrainBook> wrapper = new QueryWrapper<>();
wrapper.eq('parent_id', parentId);
wrapper.orderByAsc('sort');
List<TrainBook> children = baseMapper.selectList(wrapper);
for (TrainBook child : children) {
child.setChildren(queryChildNodes(child.getId()));
}
return children;
}
然后在第 13 行调用该方法:
List<TrainBook> roots = queryChildNodes(StringPool.ROOT);
- 如果需要查询 typeId 对应的所有节点,并按照树形结构进行分页,则需要使用递归查询,并在查询结果中截取指定页的数据:
private List<TrainBook> queryChildNodes(String parentId, int offset, int limit) {
QueryWrapper<TrainBook> wrapper = new QueryWrapper<>();
wrapper.eq('parent_id', parentId);
wrapper.orderByAsc('sort');
List<TrainBook> children = baseMapper.selectList(wrapper);
List<TrainBook> result = new ArrayList<>();
for (TrainBook child : children) {
result.addAll(queryChildNodes(child.getId(), 0, Integer.MAX_VALUE));
}
int startIndex = Math.min(offset, result.size());
int endIndex = Math.min(startIndex + limit, result.size());
return result.subList(startIndex, endIndex);
}
然后在第 17 行调用该方法:
List<TrainBook> result = queryChildNodes(StringPool.ROOT, bsPage.getOffset(), bsPage.getLimit());
bsPage.setRecords(result);
希望以上信息能够帮助您理解代码并根据您的实际需求进行调整。
原文地址: https://www.cveoy.top/t/topic/mGXX 著作权归作者所有。请勿转载和采集!