在IT的项目开发中,有时我们会经常遇到树形列表数据的查询等的相关操作,比如下面的情况就是如此:
传统的遍历方式
树形列表数据最基本的展示一共需要三个字段,分别是id,pId以及name。其中id是该条信息的主键,一般是自增的,并且不允许重复。pId是该条信息所归属的父节点的id,该pId允许重复,而顶级的节点其由于没有父节点,故其父节点字段往往以0进行标识。而name就是该条数据所展示的名称字段。
传统的树形列表数据的查询方式是先查询pId为0的数据,然后以该数据的id作为子节点pId的查询条件,用此来查询其直接的子节点数据;再以此子节点的id作为下一层数据的pId查询条件,依次类推,逐渐完成整个树形列表数据的查询操作。
源码如下:
Tree
package com.thinkgem.jeesite.entity;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@Builder
@ToString
public class Tree {
private int id;
private String name;
private int pId;
private String level;
}
TraditionTest
package com.thinkgem.jeesite.tree;
import com.baishun.common.utils.ListContainer;
import com.google.common.collect.Lists;
import com.thinkgem.jeesite.entity.Tree;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
/**
* 传统的查找方式
*/
@Slf4j
public class TraditionTest {
private ListContainer<Tree> treeContainer = ListContainer.newListContainer();
/**
* 链式调用添加数据
*/
@Before
public void initDB(){
Tree tree = Tree.builder()
.id(1)