文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

springboot+mybatis plus怎么实现树形结构查询

2023-06-20 17:26

关注

本篇内容介绍了“springboot+mybatis plus怎么实现树形结构查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

目录

背景

实际开发过程中经常需要查询节点树,根据指定节点获取子节点列表,以下记录了获取节点树的操作,以备不时之需。

使用场景

可以用于系统部门组织机构、商品分类、城市关系等带有层级关系的数据结构;

设计思路

递归模型

即根节点、枝干节点、叶子节点,数据模型如下:

idcodenameparent_code
110000电脑0
220000手机0
310001联想笔记本10000
410002惠普笔记本10000
51000101联想拯救者10001
61000102联想小新系列10001

实现代码

表结构

CREATE TABLE `tree_table` (  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',  `code` varchar(10) NOT NULL COMMENT '编码',  `name` varchar(20) NOT NULL COMMENT '名称',  `parent_code` varchar(10)  NOT NULL COMMENT '父级编码',  PRIMARY KEY (`id`) USING BTREE) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='树形结构测试表';

表数据

INSERT INTO `tree_table`(`code`, `name`, `parent_code`) VALUES ('10000', '电脑', '0');INSERT INTO `tree_table`(`code`, `name`, `parent_code`) VALUES ('10001', '联想笔记本', '10000');INSERT INTO `tree_table`(`code`, `name`, `parent_code`) VALUES ('10002', '惠普笔记本', '10000');INSERT INTO `tree_table`(`code`, `name`, `parent_code`) VALUES ('1000101', '联想拯救者', '10001');INSERT INTO `tree_table`(`code`, `name`, `parent_code`) VALUES ('1000102', '联想小新系列', '10001');

实体

@Data@TableName("tree_table")@EqualsAndHashCode(callSuper = false)@Accessors(chain = true)public class TreeTable {        @TableId(type = IdType.AUTO)    private Integer id;        private String code;        private String name;        private String parentCode;        @TableField(exist = false)    private List<TreeTable> childNode;}

mybatis

mapper

public interface TreeTableMapper extends BaseMapper<TreeTable> {        public List<TreeTable> noteTree();}

xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.springboot.example.mysqltree.mapper.TreeTableMapper">    <resultMap id="BaseResultMap" type="com.springboot.example.mysqltree.model.entity.TreeTable">        <result column="id" property="id"/>        <result column="code" property="code"/>        <result column="name" property="name"/>        <result column="parent_code" property="parentCode"/>    </resultMap>    <resultMap id="NodeTreeResult" type="com.springboot.example.mysqltree.model.entity.TreeTable"               extends="BaseResultMap">        <collection property="childNode" column="code" ofType="com.springboot.example.mysqltree.model.entity.TreeTable"                    javaType="java.util.ArrayList" select="nextNoteTree">        </collection>    </resultMap>    <sql id="Base_Column_List">                id,                code,                `name`,                parent_code    </sql>       <select id="nextNoteTree" resultMap="NodeTreeResult">        select        <include refid="Base_Column_List"/>        from tree_table        where parent_code=#[code]    </select>    <select id="noteTree" resultMap="NodeTreeResult">        select        <include refid="Base_Column_List"/>        from tree_table        where parent_code='0'    </select></mapper>

启动类

@Slf4j@Componentpublic class TreeTableCommandLineRunner implements CommandLineRunner {    @Resource    private TreeTableMapper treeTableMapper;    @Override    public void run(String... args) throws Exception {        log.info(JSONUtil.toJsonPrettyStr(treeTableMapper.noteTree()));    }}

最终效果

[    {        "code": "10000",        "childNode": [            {                "code": "10001",                "childNode": [                    {                        "code": "1000101",                        "childNode": [                        ],                        "parentCode": "10001",                        "name": "联想拯救者",                        "id": 5                    },                    {                        "code": "1000102",                        "childNode": [                        ],                        "parentCode": "10001",                        "name": "联想小新系列",                        "id": 6                    }                ],                "parentCode": "10000",                "name": "联想笔记本",                "id": 3            },            {                "code": "10002",                "childNode": [                ],                "parentCode": "10000",                "name": "惠普笔记本",                "id": 4            }        ],        "parentCode": "0",        "name": "电脑",        "id": 1    }]

注意事项

使用mybatis时如加载不到mapper xml需在pom.xml添加以下配置:

<resources>    <resource>        <directory>src/main/resources</directory>        <filtering>true</filtering>    </resource>    <resource>        <directory>src/main/java</directory>        <includes>            <include>**/*.xml</include>        </includes>    </resource></resources>

总结

使用递归方式是比较常见的方式,优点是实现简单,直观的体现层级关系,但是数据量大的情况下效率会略低;欢迎使用其他方式的小伙伴分享自己的实现思路。

“springboot+mybatis plus怎么实现树形结构查询”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯