树形结构的实现方式

一. Sql语句完成树形结构

虽然可以实现但是查询速度很慢 效率低 在多数据时不推荐使用

 <resultMap id="listMap" type="映射实体类">
        <id column="id"  property="id"/>
        <result column="name"  property="name"/>
        <collection property="children" ofType="集合的类型(实体)" select="treeList" column="{parentId = id,name = name}"/> //映射实体类中的子节点集合 嵌套查询
    </resultMap>

    <select id="treeList" resultMap="listMap">
       select id,name,sort,parentId from 表
        <where>
            <choose>
                <when test="parentId!=null">
                    and parentId = #{parentId}
                </when>
                <otherwise>
                    and parentId = 0
                </otherwise>
            </choose>
        </where>
         order by sort desc
    </select>

二.使用递归实现树形结构

mapper层 查询所有数据 select * from 表

代码层

/**
     * 获取父节点菜单
     * @param treesList 所有树菜单集合  调用此方法实现树形结构
     * @return
     */
    public final static List<User> getFatherNode(List<User> treesList){
        List<User> newTrees = new ArrayList<User>(); //查询所有信息 
        for (User user : treesList) {
            if (user.getParentId() == 0 ) {//如果pId为0,则该节点为父节点
                //递归获取父节点下的子节点
                user.setChildren(getChildrenNode(user.getId(), treesList));
                newTrees.add(user);
            }
        }
        return newTrees;
    }

    /**
     * 递归获取子节点下的子节点
     * @param pId 父节点的ID
     * @param treesList 所有菜单树集合
     * @return
     */
    private final static List<User> getChildrenNode(Long pId, List<User> treesList){
        List<User> newTrees = new ArrayList<User>();
        for (User user : treesList) {
            if (user.getParentId() == 0 ){
                continue;
            }

            if(user.getParentId().equals(pId)){
                //递归获取子节点下的子节点,即设置树控件中的children
                user.setChildren(getChildrenNode(user.getId(), treesList));
                newTrees.add(user);
            }
        }
        return newTrees;
    }
发布了6 篇原创文章 · 获赞 0 · 访问量 56

猜你喜欢

转载自blog.csdn.net/zangqi123/article/details/105272094