mybatis collection 只能映射第一个对象的原因

今天在做一个一对多的关联查询时,明明对面有多条数据,但是死活只能拿到第一条,xml文件的配置如下

其中,cn.college.school.vo.MenuSupportVo 对象里面有这样一个属性

//关联的学校列表
private List<School> schools;

关联都是正常的mybatis操作,如果mybatis不熟的请自行百度

cn.college.school.dao.SchoolDao.menuGetSchool 对应的查询为

 <select id="menuGetSchool" resultType="cn.college.school.vo.MenuSupportVo" >
        select * from school where id in (${_parameter});
    </select>

之所以用  ${}  来包围是因为我传过去的 schoolIds  参数是 这样的  21,23,24 如果用#{} 包围mybatis会把其当为占位符来传递

只会查到一条记录了

${_parameter}  不用 ${schoolIds} 是因为 如果只有一个参数过来时,有时会报一个错

There is no getter for property named 'XXX' in 'class java.lang.String'

这是mybatis本身的问题,要么在接口加上 @Param 来映射,要么就用这个,我的因为是在xml文件引用的,所以就用了这个参数

 

然后查询的时候是这样的

 

mybatis打印的日志是3条记录,但是返回的对象始终只能映射第一条,后来参考了几篇文章,说是因为两张表的字段有些重复了,导致只能映射一个

https://blog.csdn.net/yangjiehuan/article/details/78523080

但是上面都是连接查询的,而我的是用collection的select进行查询关联的,所以很麻烦,知道原因后

其实我只是想查询 name 属性过来而已,那能不能直接用String来接收,然后试了一下

跟原来的其实差不多,只是查询语句变了

首先在 cn.college.school.vo.MenuSupportVo 加了这样一个属性

//学校名称
private List<String> schoolNames;

然后把  第一xml文件的内容改为

红色指示的是修改的地方

 

然后再把那边的文件改为

 <select id="menuGetSchool" resultType="java.lang.String" >
        select name from school where id in (${_parameter});
    </select>

 

然后再次查询,发现就可以了,如下图

 

 

很明显是可以的,所以就使用了这样的方法来处理即可

参考文章

 

https://www.cnblogs.com/orac/p/6726323.html

https://www.cnblogs.com/orac/p/6726323.html


https://blog.csdn.net/yangjiehuan/article/details/78523080

 

记录一下,防止下次出现同样的问题没有头绪

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值