
com.gitee.qdbp.jdbc.stream.RecursiveQueryStream Maven / Gradle / Ivy
package com.gitee.qdbp.jdbc.stream;
import java.util.Arrays;
import java.util.List;
import com.gitee.qdbp.jdbc.api.CrudDao;
import com.gitee.qdbp.tools.utils.VerifyTools;
/**
* 递归查询流式操作对象
*
* @author zhaohuihua
* @version 20210530
*/
public class RecursiveQueryStream {
protected final CrudDao dao;
private final String codeField;
private final String parentField;
RecursiveQueryStream(CrudDao dao, String codeField, String parentField) {
this.dao = dao;
this.codeField = codeField;
this.parentField = parentField;
}
/**
* 设置递归查询起始编号
* recursiveBy(codeField, parentField) 按什么字段进行递归查询
* startBy 起始编号
* filterBy 数据过滤条件, 过滤哪些数据参与递归 (如数据状态,租户编号等条件)
* searchBy 结果搜索条件 (如用户输入的查询条件) 这些条件如果放在filterWhere中将无法生成完整的树
* 注意: 查询结果包括startCode节点的自身记录, 如果不需要应在searchWhere条件排除
*
List<SysDept> depts = qdbcBoot.crudStream(SysDept.class)
.recursiveBy("id", "parentId") // 按id/parentId进行递归查询
.startByCodes("D01", "D02") // 起始编号
.filterBy("tenantCode").equals("T001").end() // 租户编号
.searchBy("id").notIn("D01", "D02").end() // 查询子节点, 但不要包含起始编号自身
.listChildren();
// .listParents();
*
*
* @param startCodes 起始编号
* @return 返回后续流式操作对象
*/
public RecursiveStartedStream startByCodes(String... startCodes) {
VerifyTools.requireNotBlank(startCodes, "startCodes");
return new RecursiveStartedStream<>(dao, codeField, parentField, Arrays.asList(startCodes));
}
/**
* 设置递归查询起始编号
* recursiveBy(codeField, parentField) 按什么字段进行递归查询
* startBy 起始编号
* filterBy 数据过滤条件, 过滤哪些数据参与递归 (如数据状态,租户编号等条件)
* searchBy 结果搜索条件 (如用户输入的查询条件) 这些条件如果放在filterWhere中将无法生成完整的树
* 注意: 查询结果包括startCode节点的自身记录, 如果不需要应在searchWhere条件排除
*
List<SysDept> depts = qdbcBoot.crudStream(SysDept.class)
.recursiveBy("id", "parentId") // 按id/parentId进行递归查询
.startByCodes("D01", "D02") // 起始编号
.filterBy((where) -> {
where.on("tenantCode").equals("T001"); // 租户编号
})
.searchBy((where) -> {
where.on("id").notIn("D01", "D02"); // 查询子节点, 但不要包含起始编号自身
})
.listChildren();
// .listParents();
*
*
* @param startCodes 起始编号
* @return 返回后续流式操作对象
*/
public RecursiveStartedStream startByCodes(List startCodes) {
VerifyTools.requireNotBlank(startCodes, "startCodes");
return new RecursiveStartedStream<>(dao, codeField, parentField, startCodes);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy