您现在的位置是:网站首页 > 代码编程 > JAVA开发JAVA开发

【原】mybatis中foreach的变量名和if的变量名相同

不忘初心 不忘初心 2018-02-26 围观() 评论() 点赞() JAVA开发

简介:在mybatis中,为我们提供了一个foreach标签,可以很方便的用来实现in语句,今天在使用的时候,碰到了一个细节问题,foreach标签中的变量名称和if条件中的变量名称一模一样,导致最后生成的sql出了问题。需求是要能够根据标签做出批量查询和单独查询,所以写了两个if标签,查询的时候,传递了批量查询的参数,但是单独查询的sql也被生成出来了,而且值还是批量查询的最后一个。不太好描述,还是直

在mybatis中,为我们提供了一个foreach标签,可以很方便的用来实现in语句,今天在使用的时候,碰到了一个细节问题,foreach标签中的变量名称和if条件中的变量名称一模一样,导致最后生成的sql出了问题。

需求是要能够根据标签做出批量查询和单独查询,所以写了两个if标签,查询的时候,传递了批量查询的参数,但是单独查询的sql也被生成出来了,而且值还是批量查询的最后一个。

不太好描述,还是直接上图片:

mybatis中foreach的变量名和if的变量名相同

大家可以看到上图中,第一个and中是根据tags做一个in查询,第二个and中是根据tag做一个like查询,但是问题来了,第二个and中我压根儿就没有传值。

mybatis中foreach的变量名和if的变量名相同

debug中看到tag是没有传递参数的,一直为null,而tags有5个值,很神奇,硬是没想明白为啥,后来实在没办法,将第二个and中的参数名字改了一下,立马就没这个问题了,但是一直没想明白其中的原理,猜想可能是foreach和if中的参数名称一致引起的。

mybatis中foreach的变量名和if的变量名相同

大家看到上下两张图,红色框框标记的不同位置,这几个地方的参数名称统一都是tag

mybatis中foreach的变量名和if的变量名相同

想想这个问题,也是有趣,完全是因为自己的不细心和强迫症造成的,大家有没有碰到过这个问题呢?

javamybatisforeach

看完文章,有任何疑问,请加入群聊一起交流!!!

很赞哦! ()

文章评论

  • 请先说点什么
    人参与,条评论

请使用电脑浏览器访问本页面,使用手机浏览器访问本页面会导致下载文件异常!!!

雨落无影

关注上方公众号,回复关键字【下载】获取下载码

用完即删,每次下载需重新获取下载码

若出现下载不了的情况,请及时联系站长进行解决

站点信息

  • 网站程序:spring + freemarker
  • 主题模板:《今夕何夕》
  • 文章统计:篇文章
  • 标签管理标签云
  • 微信公众号:扫描二维码,关注我们