mybatis版本 树结构数据获取:
<resultMap id="treeMap" type="com.productOrder.domain.MDirectoryMenuVo" >
<result column="id" property="id" />
<result column="dir_parent_id" property="dirParentId" />
<result column="dir_root_id" property="dirRootId" />
<result column="dir_level" property="dirLevel" />
<result column="dir_path" property="dirPath" />
<result column="tenant_id" property="tenantId" />
<result column="dir_current_id" property="dirCurrentId" />
<!--id作为参数递归调用getDeptTree,查询子节点-->
<collection property="mDirectoryMenu" column="{dirCurrentId = dir_current_id,tenantId = tenant_id}" ofType="map" select="findMenuMDirectory"/>
</resultMap>
<select id="findMDirectory" resultMap="treeMap" >
SELECT <include refid="Base_Column_List" />
FROM m_directory WHERE dir_parent_id = 0 and tenant_id = #{tenantId}
</select>
<!-- 查询子节点 -->
<select id="findMenuMDirectory" parameterType="java.util.Map" resultMap="treeMap" >
SELECT <include refid="Base_Column_List" />
FROM m_directory WHERE dir_parent_id RegExp #{dirCurrentId} and tenant_id RegExp #{tenantId}
</select>
java 8版本 树结构数据获取::
//获取父节点
List<SpuBaseClassificationMenuVo> collect = spuBaseClassificationVoList.stream().filter(m -> m.getParentId().equals("0")).map(
(m) -> {
m.setChildList(getChildrens(m, spuBaseClassificationVoList));
return m;
}
).collect(Collectors.toList());
private List<SpuBaseClassificationMenuVo> getChildrens(SpuBaseClassificationMenuVo spuBaseClassificationMenuVo, List<SpuBaseClassificationMenuVo> spuBaseClassificationVoList) {
List<SpuBaseClassificationMenuVo> children = spuBaseClassificationVoList.stream().filter(m -> {
return Objects.equals(m.getParentId(), spuBaseClassificationMenuVo.getViewId());
}).peek(
(m) -> m.setChildList(getChildrens(m, spuBaseClassificationVoList))
).collect(Collectors.toList());
return children;
}
其他版本后续输出!!!

该博客介绍了如何使用MyBatis在SQL查询中构建树形数据结构,以及如何通过Java8的Stream API实现相同功能。通过`<resultMap>`配置和递归查询,MyBatis可以获取层级关系的数据。而在Java8中,利用流和过滤操作,可以动态构建父节点及其子节点的树结构。这两种方法展示了在不同场景下处理树形数据的有效策略。
1521

被折叠的 条评论
为什么被折叠?



