Mybatis使用foreach批量插入Oracle提示命令未正确结束方式

 更新时间:2025年11月11日 08:37:55   作者:Funky_oaNiu  
文章主要讨论了在Oracle和MySQL中使用foreach标签时的语法差异,以及foreach元素的属性介绍,包括item、index、collection、open、separator和close等

错误代码

<insert id="multiInsertTest" parameterType="java.util.List">
		INSERT INTO TEST_NWD (ID, NUM) 
		VALUES
		<foreach collection ="testList" item="test" separator ="UNION ALL">
				(#{test.ID}, #{test.NUM})
		</foreach >
	</insert>

这样会执行:

INSERT INTO TEST_NWD (ID, NUM)  VALUES (?,?) ,(?,?)

Oracle是不支持这种语法的,会提示SQL命令未正确结束,MySQL是支持的。

正确代码

<insert id="multiInsertTest" parameterType="java.util.List">
		INSERT INTO TEST_NWD (ID, NUM)
		<foreach collection ="testList" item="test" separator ="UNION ALL">
			SELECT
				#{test.ID}, #{test.NUM}
			FROM dual
		</foreach >
	</insert>

1、 将VALUES去掉

2、 foreach标签内的()去掉,使用select … from dual

3、 separator =","改为separator=“UNION ALL”

foreach标签的属性介绍

foreach元素的属性主要有item,index,collection,open,separator,close。 

  • item:集合中元素迭代时的别名,该参数为必选。 
  • index:在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选 
  • open:foreach代码的开始符号,一般是(和close=")“合用。常用在in(),values()时。该参数可选 
  • separator:元素之间的分隔符,例如在in()的时候,separator=”,“会自动在元素中间用“,“隔开,避免手动输入逗号导致sql错误,如in(1,2,)这样。该参数可选。 
  • close: foreach代码的关闭符号,一般是)和open=”("合用。常用在in(),values()时。该参数可选。 
  • collection: 要做foreach的对象,作为入参时,List对象默认用"list"代替作为键,数组对象有"array"代替作为键,Map对象没有默认的键。当然在作为入参时可以使用@Param(“keyName”)来设置键,设置keyName后,list,array将会失效。 除了入参这种情况外,还有一种作为参数对象的某个字段的时候。举个例子:如果User有属性List ids。入参是User对象,那么这个collection = “ids”.如果User有属性Ids ids;其中Ids是个对象,Ids有个属性List id;入参是User对象,那么collection = “ids.id”

总结

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

相关文章

  • 详解Java Unsafe如何花式操作内存

    详解Java Unsafe如何花式操作内存

    C++可以动态的分类内存,而java并不能这样,是不是java就不能操作内存呢,其实是有其他办法可以操作内存的,下面就一起看看Unsafe是如何花式操作内存的吧
    2023-08-08
  • 利用Java实现图片马赛克效果

    利用Java实现图片马赛克效果

    马赛克效果是一种常见的图像处理技术,通过将图像划分为多个小块并对每个小块进行平均色处理,模拟马赛克的效果,在本项目中,我们将使用Java的Swing库和图像处理技术来实现图片的马赛克特效,需要的朋友可以参考下
    2025-02-02
  • SpringBoot应用程序启动监听功能的常见方法

    SpringBoot应用程序启动监听功能的常见方法

    应用启动监听在 Spring Boot 和其他框架中扮演着重要的角色,它们的主要作用是在应用启动或关闭时触发特定的操作或任务,本文给大家介绍了SpringBoot应用程序启动监听功能的常见方法,需要的朋友可以参考下
    2024-05-05
  • 用Java实现小球碰壁反弹的简单实例(算法十分简单)

    用Java实现小球碰壁反弹的简单实例(算法十分简单)

    下面小编就为大家带来一篇用Java实现小球碰壁反弹的简单实例(算法十分简单)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • Java简单实现动态代理模式过程解析

    Java简单实现动态代理模式过程解析

    这篇文章主要介绍了Java动态代理模式简单案例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Springboot解决ajax+自定义headers的跨域请求问题

    Springboot解决ajax+自定义headers的跨域请求问题

    由于浏览器同源策略(同源策略,它是由Netscape提出的一个著名的安全策略,现在所有支持JavaScript 的浏览器都会使用这个策略。接下来通过本文给大家介绍Springboot如何优雅的解决ajax+自定义headers的跨域请求 ,需要的朋友可以参考下
    2019-05-05
  • Spring中的@ConfigurationProperties详解

    Spring中的@ConfigurationProperties详解

    这篇文章主要介绍了Spring中的@ConfigurationProperties详解,ConfigurationProperties注解主要用于将外部配置文件配置的属性填充到这个Spring Bean实例中,需要的朋友可以参考下
    2023-09-09
  • MyBatis中的resultMap简要概述

    MyBatis中的resultMap简要概述

    这篇文章主要介绍了MyBatis中的resultMap简要概述的相关资料,需要的朋友可以参考下
    2016-07-07
  • Java类加载器之ContextClassLoader详解

    Java类加载器之ContextClassLoader详解

    这篇文章主要介绍了Java类加载器之ContextClassLoader详解,ContextClassLoader是一种与线程相关的类加载器,类似ThreadLocal,每个线程对应一个上下文类加载器,需要的朋友可以参考下
    2023-10-10
  • IntelliJ IDEA下载GitHub私有仓库到本地的方法(新版)

    IntelliJ IDEA下载GitHub私有仓库到本地的方法(新版)

    这篇文章主要介绍了IntelliJ IDEA下载GitHub私有仓库到本地(新版),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05

最新评论