SpringBoot+Mybatis用BuildTree写树

在Controller层
@RequestMapping(value="/dictionarygroup",method = RequestMethod.POST)
public Result selectTree(){
    List list=sysDictionaryGroupService.selectTree();
    return Result.ok().put("result", list);
}

在Service层

List selectTree();

在ServiceImpl里面

public List selectTree() {

    BuildTree buildTree=new BuildTree();
    //获取数据的list
    List treeNodes=sysDictionaryGroupDao.findTree();

    List list= buildTree.buildTree(treeNodes);

    return list;
}

在Dao或者Mapper层

List findTree();

在XML文件

返回节点的实体类

SpringBoot+Mybatis用BuildTree写树_第1张图片

 

真正的重点,把这个放在Util里面,直接调用就生成树啦

/**
 * 

* 生成树结构数据 * 使用方式: * List list = menuLeftMapper.selectNodeByLength(length); * String json = new TreeBuilder().buildTree(list); *

* @author tangbin * @since 2018-07-30 */ public class BuildTree { List TreeNodes = new ArrayList<>(); public List buildTree(List TreeNodes) { BuildTree treeBuilder = new BuildTree(TreeNodes); return treeBuilder.buildJSONTree(); } public BuildTree() { } public BuildTree(List TreeNodes) { super(); this.TreeNodes = TreeNodes; } // 构建JSON树形结构 public List buildJSONTree() { List TreeNodeTree = buildTree(); return TreeNodeTree; } // 构建树形结构 public List buildTree() { List treeTreeNodes = new ArrayList<>(); //获取所有根节点 List rootTreeNodes = getRootTreeNodes(); //获取每个根节点 for (TreeNode rootTreeNode : rootTreeNodes) { try { //递归这个根节点的子节点 buildChildTreeNodes(rootTreeNode); //用list来存放每个根节点 treeTreeNodes.add(rootTreeNode); } catch (Exception e) { e.printStackTrace(); } } return treeTreeNodes; } // 递归子节点 public void buildChildTreeNodes(TreeNode TreeNode) { List children = getChildTreeNodes(TreeNode); if (!children.isEmpty()) { for (TreeNode child : children) try { buildChildTreeNodes(child); } catch (Exception e) { e.printStackTrace(); } TreeNode.setChildren(children); } } /** * 获取父节点下所有的子节点 * @param pTreeNode * @return */ public List getChildTreeNodes(TreeNode pTreeNode) { List childTreeNodes = new ArrayList<>(); for (TreeNode n : TreeNodes) { if (pTreeNode.getCode().equals(n.getPcode())) { childTreeNodes.add(n); } } return childTreeNodes; } // 判断是否为根节点 public boolean rootTreeNode(TreeNode TreeNode) { boolean isRootTreeNode = true; for (TreeNode n : TreeNodes) { if (TreeNode.getPcode().equals(n.getCode())) { isRootTreeNode = false; break; } } return isRootTreeNode; } // 获取集合中所有的根节点 public List getRootTreeNodes() { List rootTreeNodes = new ArrayList<>(); for (TreeNode n : TreeNodes) { if (rootTreeNode(n)) { rootTreeNodes.add(n); } } return rootTreeNodes; } }

你可能感兴趣的:(SpringBoot+Mybatis用BuildTree写树)