Mybatis+Collection一对多表查询踩坑

需求

自己写的springboot项目中有这样一个需求:
将简历模板映射到数据库中。

思考

简历模板包含多个属性,每个属性又有多个条目,比如个人上学经历,有小学,初中,高中,大学等多个条目,如果把这些全部都存到一个表里就不那么好。

解决方案

将简历表作为主表,将简历中包含的属性作为从表,这样就形成了主从表的结构。

实现方法

现在需要的是后端从数据库中将简历模板信息拿到,就涉及到了主从表查询,这里介绍MyBatis的关联查询

MyBatis关联查询

一对一association查询

很简单,就是一对多的简易版,不多赘述。主要讲collection查询。

一对多collection查询

一:建主从表的实体类
在这里插入图片描述
其中lev1Entity是主表其他都是从表
二:需要将从表作为一个属性单独的加到主表实体类中
在这里插入图片描述
三:接下来就要用到collection查询了
首先需要将collection作为返回写到resultmap中
在这里插入图片描述
注意resultmap的type和id等属性。
四:然后就写select查询即可
在这里插入图片描述
五:查询到的结果如下:
在这里插入图片描述
前面的主表内容相同,后面是一个从表的两个条目,查询结果是分开的,但是MyBatis根据一定规则将他们自动映射到数据集List中,合并为一条数据,这也就有了下面的坑:

坑1

坑1:注意这里select的返回类型需要是resultmap对应上面返回结果的resultmap类型,不能是resulttype,否则查询到的多条结果将不会合并到list’中,这里是一个注意点。

坑2

坑2:坑2是因为一个collection只能多一个sql查询,而我需要一个主表对应多个从表,就需要多个collection查询,select语句前面贴图已经有了,但是我遇到的问题是他们始终合并不了,类似于笛卡尔积,会多出许多重复的条目
原因:
原因是MyBatis中进行结果映射时是用数据库的列名进行查询的,这时如果多个表存在相同的字段名时,他们就会重复,不会合并,这是MyBatis这里的规则。
解决方案一:select查询时用别名查询

解决方案二:修改数据库中没有相同的字段名即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值