首页   >   代码编程   >   JAVA开发

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 (已满)

QQ群Ⅱ: 718410762 (已满)

QQ群Ⅲ: 638620451 (已满)

QQ群Ⅳ: 474195684

如果文章有帮到你,可以考虑请博主喝杯咖啡!

分享到:

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

作者:不忘初心

发布时间:2018-02-26

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

评论