前言:最近搞树形结构比较多,网上总体分为子关联查询,子查询等等方法,个人感觉都不是很好用,现总结出自己的经验。个人体会,仅供参考!

第一种思路:压力全放在数据库(单条SQL查询)

实现方法:各种存储过程,关联查询,子查询等等

这种思路的好处在于查询出来的结果清晰明了,查询出来的结果基本不需要做额外的处理,缺点在于阅读性稍差,数据库压力较大,理论上效率比第二种思路要差。

 

第二种思路:压力放在业务代码

实现方法:一次性查询出所有数据,在业务代码层进行封装拼接。

这种思路的好处在于数据库基本没有什么压力,一条SQL查询出所有数据即可,但是业务层处理的逻辑就稍微比较复杂。

 

第三种思路:多条SQL查询

实现方法:例如一个层高为2的树形结构,其实不管是自关联查询,还是子查询,都得有个回表的操作,个人感觉查询效率和用两条SQL效率也差不多。基于这个认知,我决定每一层的数都用一条SQL,然后查询结果用JAVA循环来构造树形结构。

以层高为2的树形结构为例子,构造过程如下:

1、select * from xx where parent_id=0; //查询出父节点 parentArray,
2、select * from xx where parent_id in (parentArray); //查询出所有的子节点,

3、代码循环匹配父子节点,构造成树形结构对象。

这种思路的好处在于实现思路比较清晰,方便阅读,方便查错,但是效率上比第一种思路要差一点。

 

第四种:懒加载形式

实现方法:首次只查询最外层树结构,前端每次点击哪一个节点,就通过节点ID去的查询子节点列表。

这种优点在于实现简单,思路清晰。