以下是使用 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;

这段代码展示了根据不同的查询条件进行数据查询的逻辑,可以根据实际需求进行调整。

可能的修改代码:

  1. 如果需要查询 typeId 对应的所有节点,包括非叶子节点,则需要注释掉第 10 行的条件语句:
//wrapper.ne('id', StringPool.ROOT);
  1. 如果需要查询 typeId 对应的所有节点,不分根节点和叶子节点,则需要注释掉第 11、12 行的条件语句:
//wrapper.eq('parent_id', StringPool.ROOT);
//wrapper.orderByAsc('sort');
  1. 如果需要查询 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);
  1. 如果需要查询 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);

希望以上信息能够帮助您理解代码并根据您的实际需求进行调整。

基于 MyBatis Plus 实现 TrainBook 数据分页查询

原文地址: https://www.cveoy.top/t/topic/mGXX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录