千家信息网

MyBatis如何查询树形数据

发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,这篇文章主要为大家展示了"MyBatis如何查询树形数据",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"MyBatis如何查询树形数据"这篇文章吧。方法一:
千家信息网最后更新 2025年01月16日MyBatis如何查询树形数据

这篇文章主要为大家展示了"MyBatis如何查询树形数据",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"MyBatis如何查询树形数据"这篇文章吧。

方法一:使用嵌套结果集实现

1,准备工作

(1)假设我们有如下一张菜单表 menu,其中子菜单通过 parendId 与父菜单的 id 进行关联:

(2)对应的实体类如下:

@Setter@Getterpublic class Menu {    private Integer id;    private String name;    private List children;}

2,实现代码

(1)假设目前菜单只有两级,MyBatis 语句如下。其原理是通过关联查询,一次性将数据查询出来,然后根据 resultMap 的配置进行转换,构建目标实体类。

优点:只由于该方法需要访问一次数据库就可以了,不会造成严重的数据库访问消耗。

                                                                    

最终获取到的结果如下:

(2)如果菜单有三级的话,则 MyBatis 语句做如下修改,再增加一个嵌套结果级即可:

                                                                                                                            

(3)如果菜单级别不确定,可能只有一级、或者有两级、或者有三级(最多三级),可以对 SQL 语句稍作修改,改成左连接即可:

                                                                                                                            

方法二:使用递归查询实现

(1)下面代码使用递归查询出所有菜单(无论层级有多深):

递归查询好处在于简单易懂,通过简单的配置就可以达到目标效果。不足之处在于由于需要多次查询数据库,如果结果集记录条数过大,会造成较大的数据库访问消耗。

                                                  

(2)关联查询还可以传递多个参数,此时传递部分 column 的值为多个键值对(由于这里传递的 name 其实没有用到,只是做个演示,下面的查询结果同前面的是一样的):

                                                  

以上是"MyBatis如何查询树形数据"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0