Mybatis实现树状结构查询
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实现树状结构查询的更多相关文章
- PostgreSQL递归查询实现树状结构查询
在Postgresql的使用过程中发现了一个非常有意思的功能,就是对于须要相似于树状结构的结果能够使用递归查询实现.比方说我们经常使用的公司部门这样的数据结构.一般我们设计表结构的时候都是相似以下的S ...
- 浅谈oracle树状结构层级查询之start with ....connect by prior、level及order by
浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...
- 浅谈oracle树状结构层级查询测试数据
浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...
- 由简入繁实现Jquery树状结构
在项目中,我们经常会需要一些树状结构的样式来显示层级结构等,比如下图的样式,之前在学.net的时候可以直接拖个服务端控件过来直接使用非常方便.但是利用Jquery的一些插件,也是可以实现这些效果的,比 ...
- 使用Map辅助拼装树状结构,消除递归调用
目前菜单或其他树状结构在数据库中的存储,多数是以一个parentid作为关联字段,以一维形式存储.使用时全部查询出来,然后在内存中拼装成树状结构.现在主要涉及的是拼装方法的问题. 一般可以进行 递归调 ...
- 将lits集合转化为树状结构
一,bean的类型: public class DeptListRES { /** * 子节点 */ private List<DeptListRES> children; private ...
- 用Django ORM实现树状结构
前言 之前看对于用关系数据库实现树状结构的方法就知道一直做自关联的表,但是感觉自关联查询太慢了,最近看到一篇文章,感觉视野开拓了好多,文章:数据库表设计,没有最好只有最适合来自:微信. 下面就针对这里 ...
- JQuery 树状结构 jQuery-treeview.js 插件
由简入繁实现Jquery树状结构 在项目中,我们经常会需要一些树状结构的样式来显示层级结构等,比如下图的样式,之前在学.net的时候可以直接拖个服务端控件过来直接使用非常方便.但是利用Jquery的一 ...
- oracle存储过程删除树状结构的表数据
今天在删除一个车辆品牌表的时候,遇到了一个问题,是在java的代码中做逻辑删除还是直接在Oracle中一次删除完成呢 思来想去觉得还是在sql里直接删除比较合适, 为什么呢? 第一,涉及数据库的读写操 ...
- EntityFrameworkCore 单表树状结构配置
数据结构 public class TreeNode { [Key] public long Id { get; set; } public string NodeName { get; set; } ...
随机推荐
- win10 系统修复IE11方法
我也是手贱卸载了IE11,启用或关闭Windows功能里也没有Internet Explorer 11,今天意外发现了解决办法. 设置--应用--应用和功能--管理可选功能--添加功能--Intern ...
- CC1101RGPR学习笔记:工作原理简单入门
众所周知,在IOT的市场应用中,从通信协议细分的话,有SUB-1G,2.4G,3G, 4G,以及最新推出的5G,虽然5G通信协议已经在崭露头角,但是不同的通信协议在不同的应用领域之中还是占据着一定的重 ...
- [2002年NOIP普及组] 选数
已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时, ...
- ubuntu拨号上网与以太网
拨号上网使用的是ppp协议,主机和主机之间是点对点连接的,通常使用掩码255.255.255.255的方式来表示一个点对点连接. 以太网:使用的以太网协议. 拨号上网和以太网是两个完全不同的东西,如果 ...
- FTP主动模式(Port)和被动模式(Passive)的区别
1.FTP的PORT(主动模式): PORT中文称为主动模式,工作的原理: FTP客户端(1024以上端口)连接到FTP服务器的21端口,发送用户名和密码登录, 登录成功后要list列表或者读取数据时 ...
- go-使用 vscore 调试 go 语言
{ // 使用 IntelliSense 了解相关属性. // 悬停以查看现有属性的描述. // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linki ...
- 2023Hgame
2023Hgame Shared Diary 源代码先放一下 const express = require('express'); const bodyParser = require('body- ...
- 打开IE浏览器被强制跳转至edge
打开edge浏览器,右上角更多,设置,默认浏览器,设置"从不" 控制面板,Internet选项,高级,浏览,取消勾选"启用第三方浏览器扩展"
- 读后笔记 -- Java核心技术(第11版 卷 II) Chapter5 数据库编程
5.1 JDBC API 1. JDBC (Java Database Connectivity) is an API for interacting with a database in Java. ...
- springdata(jpa)的基础使用
jpa与mybatis-plus类似,都属于数据库相关的框架 jpa需要扫描,这里在启动类指定路径 jpa的实体类需要绑定@Entity, 与mysql表映射@Table(@name="数据 ...