mybatis foreach遍历时item定义的值(item=“a”) 作用范围不仅是在内部 外部其他标签使用#{a}获取时会受到严重影响
笔者在工作遇到一个问题 先上图理解一下:
一句话解释:foreach 中的item定义的值 companyId,作用范围不仅仅是在foreach标签内部,外部也会收到影响。像笔者这种情况,在if标签中的companyId,获取不到传入的参数, 实际上获取的是遍历的集合demandCompanyIds的最后一个值。至于为什么,请参考这篇文章点击打开链接
如图所示,在一个搜索查询的业务中,用户属于多个公司,根据用户id查询出用户所有公司下的数据,并可以根据指定的所选公司筛选出查询的数据,所以在条件判断中和foreach循环遍历中 笔者都是用companyId 获取值公司的Id
结果问题就来了,每次条件筛选的时候,结果都不对,查看sql语句,执行的时候g.company_id总是和筛选的公司id不一致,它的值总是demandCompanyIds的最后一个值。
解决办法就是把item的值修改一下喽,改成任意的 只要外部的标签没有和重复就行。这样的问题真的是坑(sql写的没错啊,值怎么变了?一万个草泥马在奔腾。。。。。。);