mybatis获取递归自查询的数据

问题

项目中你是否会遇到这样的问题?菜单数据全写在一张表里,而我们需要用数组将这些数据存下来并交给前端大佬,问题的关键就是,我们怎么做才能将一级菜单数据—二级菜单数据—三级菜单数据······一一对应呢?

自己的错误示例

由于自身的原因,这里的图片缺失,就文字描述,争取让大家看懂。
我当初的想法,本着对注解sql比较熟悉,那么就用注解吧,然后就直接查询全部数据,再使用
@Results({
@Result(column=id1,property=linkedlist1,[email protected](select=…)),
@Result(column=id2,property=linkedlist2,[email protected](select=…))
})
将自身给连接起来(在bean对象里添加了两个次级菜单id和两个次级菜单的linkedlist对象,这里用id1,id2,linkedlist1,linkedlist2来说明),这样做,数据倒是出来了,但是仔细一看,一级菜单数据与二级菜单数据(后面同上)根本没有对应上,每一个一级菜单对象内的二级菜单对象,都是一模一样的,这样根本不能动态对应。多次尝试无解后,结合网上的查找,我明白只能使用xml映射来写了

简单易懂的正确示例

这次有图了(感谢当时一起工作的朋友给的图)
mybatis获取递归自查询的数据
该图非常直观,一看就明白,通过resultMap映射bean对象里的字段,然后用collection来映射对象内的对象,这样便可以做到一一对应了。

总结

个人认为,遇到sql问题不用太过纠结,若是能使用注解sql,尽量使用注解sql,注解sql解决不了的,就用xml映射吧,两者可以结合。
第一次写,求轻喷,如果有注解sql能解决问题的大佬,求教