MyBatis中使用foreach循环的坑及解决

 更新时间:2022年01月12日 09:51:43   作者:小黄鸭007  
这篇文章主要介绍了MyBatis中使用foreach循环的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用foreach循环的坑

我们首先看一段MyBatis中使用foreach循环的sql:

SELECT * FROM table where id in
<foreach item="item" collection="ids1" open="(" close=")" index="0" separator=",">
#{item}
</foreach>

这段sql执行会添加几个占位符,正确写法foreach写到一行:

正确写法为

SELECT * FROM table where id in
<foreach item="item" collection="ids1" open="(" close=")" index="0" separator=",">#{item}</foreach>

忽现的Mybatis foreach失效记录

传进来的 list 肯定有值得,本身代码没有问题。 线上也算跑了大半年了。 而且出现的问题时也只在本机上.

mybatis.version=3.2.8

代码:

AND (
   <foreach collection="list" open=" id IN (" separator="," close=")" item="id" index="index">
     #{id}
   </foreach>
OR (GRADE In ('0','1')
   AND user_type = '5'
 )
)

正确结果应该是:

AND ( id IN ('1','2','3')
  OR (GRADE In ('0', '1') AND user_type = '5')
)

实际结果:

AND ( 
  OR (GRADE In ('0', '1') AND user_type = '5')
)

造成SQL 执行语法错误.

复现方式:暂无复现方法

解决方案

随便改了一下Dao.java的一个文件内容(没做实际性的内容改动,ide 重新加载了下Dao). bug就好了. 好了 . 了...

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java代码实现微信页面滚动防露底(核心代码)

    Java代码实现微信页面滚动防露底(核心代码)

    这篇文章主要介绍了Java代码实现微信页面滚动防露底的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • DispatcherServlet处理器的适配和处理解析

    DispatcherServlet处理器的适配和处理解析

    这篇文章主要为大家介绍了DispatcherServlet的处理器的适配和处理流程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • springboot扩展MVC的方法

    springboot扩展MVC的方法

    今天给大家带来的是关于Java的相关知识,文章围绕着springboot扩展MVC的方法展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • 怎样提高mybatis-plus中saveBatch方法的效率

    怎样提高mybatis-plus中saveBatch方法的效率

    这篇文章主要介绍了怎样提高mybatis-plus中saveBatch方法的效率问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • JVM内存模型/内存空间:运行时数据区

    JVM内存模型/内存空间:运行时数据区

    这篇文章主要介绍了JVM内存模型/内存空间的相关资料,帮助大家更好的理解和学习Java虚拟机,感兴趣的朋友可以了解详细,希望能够给你带来帮助
    2021-08-08
  • Java Collections工具类中常用算法解析

    Java Collections工具类中常用算法解析

    在软件开发中,算法是非常重要的一部分,它们可以提供高效的数据处理和操作,这篇文章主要为大家介绍了Collections 工具类集合框架中常用算法,感兴趣的可以了解一下
    2023-06-06
  • SpringMVC4 + MyBatis3 + SQL Server 2014整合教程(含增删改查分页)

    SpringMVC4 + MyBatis3 + SQL Server 2014整合教程(含增删改查分页)

    这篇文章主要给大家介绍了关于SpringMVC4 + MyBatis3 + SQL Server 2014整合的相关资料,文中包括介绍了增删改查分页等相关内容,通过示例代码介绍的非常详细,分享出来供大家参考学习,下面来一起看看吧。
    2017-06-06
  • Java扩展库RxJava的基本结构与适用场景小结

    Java扩展库RxJava的基本结构与适用场景小结

    RxJava(GitHub: https://github.com/ReactiveX/RxJava)能够帮助Java进行异步与事务驱动的程序编写,这里我们来作一个Java扩展库RxJava的基本结构与适用场景小结,刚接触RxJava的同学不妨看一下^^
    2016-06-06
  • Netty进阶之ChannelPoolMap源码解析

    Netty进阶之ChannelPoolMap源码解析

    这篇文章主要介绍了Netty进阶之ChannelPoolMap源码解析,ChannelPoolMap是用来存储ChannelPool和指定key的一个集合Map,实际的应用场景就是服务器端是一个分布式集群服务,拥有多个配置地址,这样我们就可以配置多个服务地址,减轻单台服务器的压力,需要的朋友可以参考下
    2023-11-11
  • JAVA8 的StringJoiner 使用及原理解析

    JAVA8 的StringJoiner 使用及原理解析

    这篇文章主要介绍了JAVA8 的StringJoiner 使用及原理解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01

最新评论