1、实体类

@Data
public class CourseChapterVO implements Serializable {
private static final long serialVersionUID = -67718827554034368L;
/**
* 主键ID
*/
private Integer id;
/**
* 课程ID
*/
private Integer courseId;
/**
* 课程章节名称
*/
private String chapterName;
/**
* 父ID
*/
private Integer chapterParent;
/**
* 层级
*/
private Integer chapterLevel; @JsonInclude(JsonInclude.Include.NON_EMPTY) //当children为空时不返回
private List<CourseChapterVO> children;
 }

2、mapper.xml

   <resultMap type="com.ruoyi.manager.vo.CourseChapterVO" id="CourseChapterMap2">
<result property="id" column="id" jdbcType="INTEGER"/>
<result property="courseId" column="course_id" jdbcType="INTEGER"/>
<result property="chapterName" column="chapter_name" jdbcType="VARCHAR"/>
<result property="chapterParent" column="chapter_parent" jdbcType="INTEGER"/>
<result property="chapterLevel" column="chapter_level" jdbcType="INTEGER"/>
<collection property="children" ofType="com.ruoyi.manager.vo.CourseChapterVO" column="id" select="selectListTree2"/>
</resultMap> <select id="selectListTree1" resultMap="CourseChapterMap2">
select id , course_id, chapter_name, chapter_parent, chapter_level
from course_chapter where chapter_parent =0 </select> <select id="selectListTree2" resultMap="CourseChapterMap2">
select id , course_id, chapter_name, chapter_parent, chapter_level from course_chapter where chapter_parent =#{id}
</select>

3、mapper.java

List<CourseChapterVO> selectListTree1(CourseChapter courseChapter);

4、serviceImpl.java

  @Override
public List<CourseChapterVO> queryAll(CourseChapter courseChapter) {
return this.courseChapterMapper.selectListTree1(courseChapter);
}

5、service.java

List<CourseChapterVO> queryAll(CourseChapter courseChapter);

6、controller.java

    @GetMapping("list")
public R queryAll(CourseChapter courseChapter) {
return R.data(this.courseChapterService.queryAll(courseChapter));
}

7、实现效果

{
"msg": "",
"code": 0,
"data": [
{
"id": 1,
"courseId": 5,
"chapterName": "第一章节学习",
"chapterParent": 0,
"chapterLevel": 1,
"children": [
{
"id": 2,
"courseId": 5,
"chapterName": "第一章节学习子1",
"chapterParent": 1,
"chapterLevel": 2
},
{
"id": 3,
"courseId": 5,
"chapterName": "第一章节学习子2",
"chapterParent": 1,
"chapterLevel": 2
},
{
"id": 4,
"courseId": 5,
"chapterName": "第一章节学习子3",
"chapterParent": 1,
"chapterLevel": 2
}
]
},
{
"id": 5,
"courseId": 5,
"chapterName": "第二章节学习",
"chapterParent": 0,
"chapterLevel": 1,
"children": [
{
"id": 6,
"courseId": 5,
"chapterName": "第二章节学习子",
"chapterParent": 5,
"chapterLevel": 2,
"children": [
{
"id": 9,
"courseId": 5,
"chapterName": "第二章节学习子1子1",
"chapterParent": 6,
"chapterLevel": 3
}
]
},
{
"id": 7,
"courseId": 5,
"chapterName": "第二章节学习子1",
"chapterParent": 5,
"chapterLevel": 2
},
{
"id": 8,
"courseId": 5,
"chapterName": "第二章节学习子2",
"chapterParent": 5,
"chapterLevel": 2
}
]
},
{
"id": 10,
"courseId": 5,
"chapterName": "第三章节学习gfdgdf",
"chapterParent": 0,
"chapterLevel": 1
}
]
}

Mybatis实现树状结构查询的更多相关文章

  1. PostgreSQL递归查询实现树状结构查询

    在Postgresql的使用过程中发现了一个非常有意思的功能,就是对于须要相似于树状结构的结果能够使用递归查询实现.比方说我们经常使用的公司部门这样的数据结构.一般我们设计表结构的时候都是相似以下的S ...

  2. 浅谈oracle树状结构层级查询之start with ....connect by prior、level及order by

    浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...

  3. 浅谈oracle树状结构层级查询测试数据

    浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...

  4. 由简入繁实现Jquery树状结构

    在项目中,我们经常会需要一些树状结构的样式来显示层级结构等,比如下图的样式,之前在学.net的时候可以直接拖个服务端控件过来直接使用非常方便.但是利用Jquery的一些插件,也是可以实现这些效果的,比 ...

  5. 使用Map辅助拼装树状结构,消除递归调用

    目前菜单或其他树状结构在数据库中的存储,多数是以一个parentid作为关联字段,以一维形式存储.使用时全部查询出来,然后在内存中拼装成树状结构.现在主要涉及的是拼装方法的问题. 一般可以进行 递归调 ...

  6. 将lits集合转化为树状结构

    一,bean的类型: public class DeptListRES { /** * 子节点 */ private List<DeptListRES> children; private ...

  7. 用Django ORM实现树状结构

    前言 之前看对于用关系数据库实现树状结构的方法就知道一直做自关联的表,但是感觉自关联查询太慢了,最近看到一篇文章,感觉视野开拓了好多,文章:数据库表设计,没有最好只有最适合来自:微信. 下面就针对这里 ...

  8. JQuery 树状结构 jQuery-treeview.js 插件

    由简入繁实现Jquery树状结构 在项目中,我们经常会需要一些树状结构的样式来显示层级结构等,比如下图的样式,之前在学.net的时候可以直接拖个服务端控件过来直接使用非常方便.但是利用Jquery的一 ...

  9. oracle存储过程删除树状结构的表数据

    今天在删除一个车辆品牌表的时候,遇到了一个问题,是在java的代码中做逻辑删除还是直接在Oracle中一次删除完成呢 思来想去觉得还是在sql里直接删除比较合适, 为什么呢? 第一,涉及数据库的读写操 ...

  10. EntityFrameworkCore 单表树状结构配置

    数据结构 public class TreeNode { [Key] public long Id { get; set; } public string NodeName { get; set; } ...

随机推荐

  1. mysql:数据库加解密查询

    解密:SELECT CONVERT (AES_DECRYPT(UNHEX( column_name), '密钥') USING utf8) AS column_name,from table_name ...

  2. VSCode 设置启用终端执行yarn

    如果你的vscode终端不支持 yarn run * 的命令你可以新建终端执行:get-ExecutionPolicy执行结果为:RemoteSigned 表示为禁用状态. 执行:set-Execut ...

  3. C# 通过程序执行svn更新或提交更改

    实现方法: private static void RunBat(string program, string parm) { try { Process proc = new Process(); ...

  4. 达梦数据库manager工具坑

    领导突然说要用达梦的数据库,对此完全没有了解. 安装没有问题. 但是这个工具真的坑到了. 因为之前用的都是navicat 干mysql ,创建数据的时候默认执行了. 但是这个工具tool/manage ...

  5. ES、Lucene、Solr的介绍和区别

    一.介绍 1.ES Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎,支持多种语言 2.Lucene Lucene可以被认为是迄今为止最先进.性能最好的.功能最全的搜索 ...

  6. Hadoop完全分布式开发配置流程

    完全分布式开发 整体流程 1.准备3台纯净虚拟机 2.修改每台ip,主机名,主机映射,关闭防火墙 3.安装jdk和hadoop,配置环境变量 4.集群分发脚本编写 5.集群配置 6.ssh免密登录 7 ...

  7. springboot启动类剔除扫描某个包

    // 排除api中不引数据库导致的报错包 @ComponentScan(excludeFilters = { @ComponentScan.Filter(type = FilterType.REGEX ...

  8. django 安装cerlery error in anyjson setup command: use_2to3 is invalid.

    直接报错 error in anyjson setup command: use_2to3 is invalid. setuptools pip install "setuptools< ...

  9. python peewee

    from peewee import MySQLDatabase, Model from peewee import CharField, IntegerField, BooleanField # 引 ...

  10. VSCode+EIDE开发CH32V系列RISC-V MCU

    VSCode+EIDE开发CH32V系列RISC-V MCU 1. VS Code Visual Studion Code (VS Code),是一款由微软开发且跨平台的免费源代码编辑器.该软件支持语 ...