mybatis获取递归自查询的数据

博客围绕项目中菜单数据用数组存储并对应交给前端的问题展开。作者先分享自身用注解 SQL 处理时一级与二级菜单无法对应动态数据的错误示例,后给出用 xml 映射实现一一对应的正确示例,最后总结遇到 SQL 问题注解与 xml 可结合使用。

问题

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

自己的错误示例

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

简单易懂的正确示例

这次有图了(感谢当时一起工作的朋友给的图)
在这里插入图片描述
该图非常直观,一看就明白,通过resultMap映射bean对象里的字段,然后用collection来映射对象内的对象,这样便可以做到一一对应了。

总结

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值