A Category Tree consists of one or more root categories, each of which can have subcategories under it. Standard Responses are nodes under categories or subcategories in the Category Tree.
前言
树形结构的数据在很多开发场合中都有用到,例如:权限树,分类树,省市区树形结构展示,有必要在这里做一下归纳总结,主要有2种方式。
分类表sql及数据:
1 | CREATE TABLE `category` ( |
对象:
1 |
|
一、在程序中递归封装数据
1 | //==========================Service========================== |
控制台sql打印:
1 | 2020-08-23 16:59:42.055 DEBUG 268040 --- [nio-8080-exec-9] c.a.a.mapper.CategoryMapper.findAll : ==> Preparing: SELECT `id`, `parent_id` parentId, `name`FROM `category` |
这种方法数据库只需执行一条sql,减轻数据库压力,但是需要在程序中递归封装子分类,子分类越多就越消耗性能。
二、在数据库中递归封装数据
1 | //==========================Service========================== |
控制台sql打印:
1 | 2020-08-23 17:20:46.802 DEBUG 270836 --- [nio-8080-exec-2] c.a.a.mapper.CategoryMapper.queryAll : ==> Preparing: SELECT `id`, `parent_id` parentId, `name`FROM `category` WHERE `parent_id`=0 |
这种方法需要在数据库递归查询子分类,需要执行多条sql,比较消耗数据库性能。但是无需在程序种再封装子类,因为在数据库递归查询时已经封装好了。对程序性能影响不大。
查询结果
1 | { |
三. 建议
一般情况下,建议使用第一种方法查询这些树形结构数据,数据库的性能相对比较珍贵。还有这些分类数据一般是热点数据,放入缓存中,可以减轻数据压力,提高程序性能。
查询叶子节点sql
1 | SELECT |
延伸
Java树形结构解析
java实现tree树形结构
JAVA 快速构建树形结构
一条sql查出树形结构数据
java递归生成树形结构菜单