欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

树形数据结构的级联查询(子查询、递归)

程序员文章站 2022-06-28 17:30:17
树形数据结构的级联查询(子查询、递归)说明:当一张表中同时存在id和pid(parent id),我们需要用子连接查出其中的级联关系,并将数据展示为多级列表(树形数据结构),参考以下查询的方法。1.表结构展示说明pid是当前行的父节点,这里pid=0是*父节点2.controller代码 @Autowired public CourseTypeServiceImpl courseTypeService; /** * 查询课程类型的树形结构,多级菜单数据...

树形数据结构的级联查询(子查询、递归)

说明:
当一张表中同时存在id和pid(parent id),我们需要用子连接查出其中的级联关系,并将数据展示为多级列表(树形数据结构),参考以下查询的方法。

1.表结构展示说明

树形数据结构的级联查询(子查询、递归)pid是当前行的父节点,这里pid=0是*父节点

2.controller代码

    @Autowired
    public CourseTypeServiceImpl courseTypeService;
    /**
     * 查询课程类型的树形结构,多级菜单数据
     * @return
     */
    @GetMapping("/treeData")
    public AjaxResult getTreeData() {
        return courseTypeService.getTreeData();
    }

3.service层代码

    @Override
    public AjaxResult getTreeData() {
    	// 这里使用的是mybatis-plus,basemapper也可以换成对应的CourseTypeMapper
        List<CourseType> courseTypes = baseMapper.selectForTreeData();
        return AjaxResult.me().setResultObj(courseTypes);
    }

4.mapper层代码

public interface CourseTypeMapper extends BaseMapper<CourseType> {
    //查询出课程类型的多级联动表单树形结构,执行的第一条是pid=0 (sql语句中直接写的,这里*目录的值为0)
    List<CourseType> selectForTreeData();
}

5.对应的sql语句

注意:
sql语句中引入了一个字段"children",需要在实体类中添加声明这个字段。

	@TableField(exist = false) //当新增表中没有的字段的时候,需要加上这个注解
    private List<CourseType> children;
<mapper namespace="cn.itsource.hb.mapper.CourseTypeMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="cn.itsource.hb.domain.CourseType">
        <id column="id" property="id" />
        <!--嵌套子查询:查询当前分类下的子分类列表 :1037
            下面的sql:cn.itsource.hrm.mapper.CourseTypeMapper.selectByPid 是重点。相当于在查询返回的结果
            是当前map类型时,它会自动将查询出来的每一条数据的column="id"作为查询条件,来执行指定的select语句

            property :对应的 type="cn.itsource.hrm.domain.CourseType"中的属性值。
                    将collection查询出来的结果 ,保存到 CourseType中的指定属性中
            ofType : 当前collection执行之后,返回的集合中的对象类型
            column : 表中的字段的值作为select的查询条件
            select : 当前collection将要执行的sql语句(支持2种传入方式:
                1. Sql语句;
                2. 当前mapper.xml文件中的某一个select的id)
        -->
        <collection property="children"
                    ofType="cn.itsource.hb.domain.CourseType"
                    column="id"
					select="cn.itsource.hb.mapper.CourseTypeMapper.selectByPid" />

    </resultMap>

    <select id="selectByPid" resultMap="BaseResultMap">
        select * from t_course_type where pid = #{pid}
    </select>

    <!-- 查出*目录,*目录的pid=0,再递归查出各级子目录 -->
    <select id="selectForTreeData" resultMap="BaseResultMap">
        select * from t_course_type where pid = 0
    </select>
</mapper>

6.查出的数据前端展示的效果

一级一级的层级关系如下
树形数据结构的级联查询(子查询、递归)

本文地址:https://blog.csdn.net/hubao12321/article/details/112688746

相关标签: java sql