一. 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;
}