Service层 : 复制代码 代码如下: @Transactional @Override public List<Tree> getChildrenTree(String pid) { try { List<Tree> result = new ArrayList<Tree>(); //获得儿子节点的列表 List<TBookType> childrenList = this.getChildrenType(pid); if (childrenList != null && childrenList.size() > 0) { for (TBookType child : childrenList) { // 获取孙子的个数 long count = bookDao.getChildrenCount(String.valueOf(child.getId())); Tree node = new Tree(); node.setId(String.valueOf(child.getId())); node.setPid(String.valueOf(child.getPid())); node.setText(child.getName()); node.setChildren(null); node.setState(count > 0 ? "closed" : "open"); //将儿子列表childrenList数据逐个存到树当中 result.add(node); } } return result; } catch (Exception e) { throw new BusinessException("获取图书类型数据出现错误!", e); } }
Dao层 : 复制代码 代码如下: @Override public List<TBookType> getChildrenType(String pid) { //这个的pid就是当前展开节点的id , 通过父节点的 id 来获得子节点 StringBuilder sqlstr = new StringBuilder(); if (StringUtils.isBlank(pid)) sqlstr.append("select * from booktype bt where bt.pid=0"); else sqlstr.append("select * from booktype bt where bt.pid=" + pid ); return this.search2(TBookType.class, sqlstr.toString()); }
复制代码 代码如下: @Override public long getChildrenCount(String pid) { //这个的pid就是当前展开节点的id , 通过父节点的 id 来获得子节点的个数 StringBuilder sqlstr = new StringBuilder(); if (StringUtils.isBlank(pid)) sqlstr.append("select count(*) from booktype tb where tb.pid="0""); else sqlstr.append("select count(*) from booktype tb where tb.pid="" + pid + """); return this.count(sqlstr.toString()); }