积微成著 不积跬步,无以至千里

首页   >   web开发   >   mybatis中foreach的变量名和if的变量名相同

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

在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的变量名相同

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

QQ群:积微成著官方群(686430774),验证消息:积微成著

站长Q:1347384268(加好友请注明来意)

分享到:

欢迎分享本文,转载请注明出处!

作者:不忘初心

发布时间:2018-02-26

永久地址:http://www.jiweichengzhu.com/article/79dc2b2a30c04e6699aeceee2fc321c3