Mybatis中实现oracle的批量插入、更新

Mybatis(Oracle)批量插入、批量更新、批量删除 mybatis映射中可以通过标签来实现Oracle的批量插入、更新和删除     标签中主要有以下属性:     collection、item、index、open、separate、close     collection:该属性必须指定,指代Dao层接口传递的数据类型,主要有三种:         ①:list集合类型;collection=”list“         ②:arr 阅读详情
oracle 实现在Mybatis中批量插入,下面测试可以使用,在批量插入中不能使用insert 标签,只能使用select标签进行批量插入,否则会提示错误

 

### Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束

 

  • 批量插入方式一

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper 
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.attence.attence.dao.AttenceDao">
	<resultMap id="Attence" type="Attence">
		<id column="ATTENCEKEY" 	property="attenceKey"/>
		<result column="EPC" 		property="epc"/>
		<result column="ANT" 		property="ant"/>
		<result column="RSSI" 		property="rssi"/>
		<result column="DEVICE" 	property="device"/>
		<result column="CRC" 		property="crc"/>
		<result column="BCC" 		property="bcc"/>
		<result column="DATETIME" 	property="dateTime" />
	</resultMap>		
	
	<select id="insertAttence" parameterType="List">
		INSERT ALL	
        <foreach collection="list" item="attence" index="index" separator="">  
		into Attence(
			attenceKey,
			epc,
			ant,
			rssi,
			device,
			crc,
			bcc,
			dateTime
		)
		values
        (
        	#{attence.id},
        	#{attence.epc},
        	#{attence.ant},
        	#{attence.rssi},
        	#{attence.device},
        	#{attence.crc},
        	#{attence.bcc},
        	#{attence.dateTime}        	
        ) 
        </foreach>  		
        SELECT * 
        FROM dual
	</select>	
</mapper>

 

<select id="insertWorksheet" parameterType="java.util.List">
        insert into TDB_WORKSHEET(WORKSHEET_ID,SIM_WORKSHEET_ID)  (
        <foreach item="item" index="index" collection="list"  separator="union all">
        (select
          #{item.worksheetId,jdbcType=VARCHAR},#{item.simWorksheetId,jdbcType=VARCHAR}
          from dual)
        </foreach>
        )
    </select>

      以上方式不支持oracle的主键序列方式。

  •  批量插入方式二

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper 
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.attence.attence.dao.AttenceDao">
	<resultMap id="Attence" type="Attence">
		<id column="ATTENCEKEY" 	property="attenceKey"/>
		<result column="EPC" 		property="epc"/>
		<result column="ANT" 		property="ant"/>
		<result column="RSSI" 		property="rssi"/>
		<result column="DEVICE" 	property="device"/>
		<result column="CRC" 		property="crc"/>
		<result column="BCC" 		property="bcc"/>
		<result column="DATETIME" 	property="dateTime" />
	</resultMap>		
	
	<insert id="insertAttence" parameterType="java.util.List">
		insert into Attence(
			attenceKey,
			epc,
			ant,
			rssi,
			device,
			crc,
			bcc,
			dateTime
		)
                Select  
                     SEQ_ATTENCE.NEXTVAL,a.*
                From (
                     <foreach collection="list" item="attence" index="index" separator="union all"> 
                     ( 
                          Select 
                                #{attence.epc}, 
                                    #{attence.ant}, 
                                    #{attence.rssi}, 
                                    #{attence.device}, 
                                    #{attence.crc}, 
                                    #{attence.bcc}, 
                                    #{attence.dateTime} 
                                    From dual 
                            ) 

                      </foreach>
                )
       </insert>
       </mapper>

         同时由于使用oracle的自增加序列,无法联合union all使用,会提示错误,必须加上select语句进行进一步封装。

         1、传入的参数只有一个list时,则Mybatis映射collection的键名list,若传入含有其他参数,需要使用HashMap,同时键名为HashMap对应的键名。

         2、传入的参数只有一个array时,则Mybatis映射collection的键名array,若传入含有其他参数,需要使用HashMap,同时键名为HashMap对应的键名。

  • 传递包含有数组参数的多参数HashMap实现批量插入

 

	<select id="insertGuideVideoList" parameterType="HashMap">
 	    insert into Guide_Video(	
				id,
				guideId,
				videoId
		) 	    
		Select
			SEQ_Guide_Video.NEXTVAL ,#{guideId}, video.*
		From( 	
 	    <foreach collection="arrGuideVideo" item="videoId" index="index" separator="union all">    
			Select
				#{videoId} videoId
			From dual 
		</foreach>
		)video
	</select>	

        arrGuideVideo是一个字符串数组,这里必须使用select标签,而不能使用insert标签。如果使用insert标签执行会提示语句未结束。


  • 实现批量更新

 

	<update id="updateTest" parameterType="Test">
	    Begin
	         Update TST_TEST
			<set> 
	            <if test="test.testName != null and test.testName!= ''">
	                TESTNAME 	= #{test.testName}, 
	            </if>
	            
	            <if test="test.gatherKey != null and test.gatherKey!= ''">
	                GATHERKEY 	= #{test.gatherKey}, 
	            </if>	   
	            
	            <if test="test.subjectKey != null and test.subjectKey!= ''">
	                SUBJECTKEY 	= #{test.subjectKey}, 
	            </if>	 	  
	            
	            <if test="test.gradeKey != null and test.gradeKey!= ''">
	                GRADEKEY 	= #{test.gradeKey}, 
	            </if>	 
	            
	            <if test="test.answerCount != null and test.answerCount!= ''">
	                answerCount 	= #{test.answerCount}, 
	            </if>	   
	            
	            <if test="test.answerEndTime != null and test.answerEndTime!= ''">
	                answerEndTime 	= #{test.answerEndTime}, 
	            </if>	
	            
	            <if test="test.answerTimeLength != null and test.answerTimeLength!= ''">
	                answerTimeLength 	= #{test.answerTimeLength}, 
	            </if>				
			</set>
			Where testKey = #{testKey}
		End;
	</update>	
       实现批量更新实际上就是 生成oracle语句的代码块,然后jdbc执行sql语句。
Mybatis+Oracle进行数据的批量插入和更新 Mybatis是web工程开发中非常常用的数据持久化的框架,通过该框架,我们非常容易的进行数据库的增删改查。数据库连接进行事务提交的时候,需要耗费的资源比较多,如果需要插入更新的数据比较多,而且每次事务只提交一条数据,会造成非常大的数据库资源浪费,导致数据库性能、系统性能大幅度下降。        关于mybatis的批量插入,网上的多数示例多半是关于MySQL数据库的,关于Oracle数据库的 阅读详情

相关推荐

OBS直播美颜全攻略:从插件下载到参数调校一站式指南

本文提供OBS直播美颜插件从下载安装到参数调校的一站式指南。详细介绍了如何安全获取并安装OBS美颜插件,重点讲解了在OBS中添加美颜滤镜的核心步骤,并分享了磨皮、肤色调整、细节增强等关键参数的实战调校技巧,帮助主播打造自然、专业的直播形象。

weixin_29197835的博客 324

mybatis使用oracle和mysql批量插入、更新

MyBatis foreach语句批量插入数据 MyBatis的mapper配置文件的语句(在Oracle数据中,多条数据之间用union all 连接,MySQL数据库用,): <insert id="submitItem" parameterType="java.util.List"> insert into ITEM ( ITEM_COD...

qq_30944053的博客 2081

西门子工业物联网云平台 Insights Hub 技术白皮书

Insights Hub是西门子公司推出的工业物联网云平台,它是一个使用开放技术的基于云架构的平台,能够为制造业企业提供物联网连接、数据分析、应用开发等一系列服务。Insights Hub的设计理念是“连接、分析和运营”,即通过连接物理设备、收集数据并进行分析,来优化工业生产的运营和管理。

可爱的刘三岁的博客 3333

Oracle+Mybatis批量插入,更新和删除

1、插入 (1)第一种方式:利用<foreach>标签,将入参的list集合通过UNION ALL生成虚拟数据,从而实现批量插入(验证过) 1 <insert id="insertBatchLaTContactRecord" parameterType="java.util.Map"> 2 <selectKey resultType="ja...

weixin_30906425的博客 390

RTL8306MB交换芯片驱动开发避坑指南:从硬件接线到SDK移植全流程解析

本文详细解析了RTL8306MB交换芯片驱动开发的全流程,重点从硬件接线、SDK移植到实战调试。针对RMII模式下的常见问题,特别是TXEN与RXDV信号交叉连接等关键“坑点”,提供了清晰的排查指南和解决方案,旨在帮助嵌入式工程师高效完成网络设备开发。

277

USB 3.0 高清音视频采集芯片——MS2130

MS2130 是一款 USB 3.0 高清视频和音频采集芯片,内部集成 USB3.0 Device 控制器、数据收发模块、音视频处理模块。

YOU_SeMi的博客 7858

oracle mybatis实现批量添加数据时如果数据存在就更新,如果不存在就插入(merge into 的用法)

判断需要插入的数据是否存在,如果不存在就更新 <insert id="saveBatch" parameterType="java.util.List" > MERGE INTO 表名 T1 USING ( <foreach collection="list" item="item" index="index" separator="u...

奋斗的日子最甜美,在科技的海洋里,永无止境。 6476

Halcon相机标定实战:从参数设置到精度优化全解析

本文详细解析Halcon相机标定的全流程,从基础概念到实战技巧,涵盖参数设置、精度优化及常见问题解决方案。通过实际案例和代码示例,帮助读者掌握工业视觉项目中相机标定的关键技术,提升测量精度和系统稳定性。

weixin_29279153的博客 321

java oracle 批量更新_Oracle + Mybatis实现批量插入、更新和删除示例代码

前言Mybatis是web工程开发中非常常用的数据持久化的框架,通过该框架,我们非常容易的进行数据库的增删改查。数据库连接进行事务提交的时候,需要耗费的资源比较多,如果需要插入更新的数据比较多,而且每次事务只提交一条数据,会造成非常大的数据库资源浪费,导致数据库性能、系统性能大幅度下降。关于mybatis的批量插入,网上的多数示例多半是关于MySQL数据库的,关于Oracle数据库的例子比较少。本...

weixin_29157493的博客 1357

SAR成像处理基本知识2——图像尺寸与回波尺寸的关系

阅读本文前,请先了解上一篇文章(SAR成像处理基本知识1——常用专用名词解释) 1. SAR图像尺寸预估方法 以C波段2m@20km的SAR图像为例,假设天线中心下视角为35° ,说明图像尺寸的估计方法。 1.1 距离向尺寸估计 地距分辨率为2m时,距离向分辨率约为1.15m,则要求信号带宽不小于130MHz,假设信号带宽为150MHz,采样率为180MHz,那么距离向分辨单元为0.833m。 地距幅宽为20km时,距离向幅宽约为20*sind(3...

爱学习的小伟的博客 4954

C# NX二次开发:两种过滤器设置方案的实战解析与场景适配

本文深入解析C# NX二次开发中的两种过滤器设置方案:AddFilterHandler回调与MaskTriple属性设置。通过实战案例对比其性能差异与适用场景,帮助开发者根据需求选择最优方案,提升NX插件开发效率与交互体验。特别针对BlockStyler集成场景提供专业建议,是NX二次开发者的实用指南。

weixin_33739646的博客 844

Mybatis基于Oracle数据库实现批量插入更新的几种方式

【代码】Mybatis基于Oracle数据库实现批量插入的几种方式。

林夕 9748

Cisco Packet Tracer 9.0 工业网络模拟:3步配置OT协议与Purdue模型实战

本文详细介绍了如何使用Cisco Packet Tracer 9.0进行工业网络模拟,包括Purdue模型构建、三大OT协议(Modbus TCP/IP、CIP、PROFINET IO)配置及工业网络安全防护。通过实战演练,读者可掌握工业网络设计、配置与安全防护的核心技能,适用于智能制造和能源管理等场景。

weixin_28691741的博客 352

mybatis oracle数据库实现批量插入,更新

更新 dao层 int change(@Param("listParam") List<Member> listParam); xml文件 <update id="change" parameterType="java.util.List"> <foreach collection="listParam" item="item" index="index" ...

New_Yao的博客 708

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

mybatis结合oracle实现数据的批量更新或者插入 merge into(批量数据中,如果有就更新 没有的话就插入)

业务场景: 子站给我们传的配置数据,包含新增的配置数据和修改的配置数据,两种数据混在一起,所以我现在要根据数据库中是否有某条配置数据来判断子站传过来的数据是新增还是修改。 首先创建oracle的序列,查询oracle的序列 select SEQUENCE_OWNER,SEQUENCE_NAME from dba_sequences where sequence_owner='用户名'; ...

qq_23296327的博客 4615

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Oracle + Mybatis实现批量插入、更新和删除示例代码

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34247155的博客 324

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Oracle通过MyBatis执行批量插入与更新问题

下面是具体的示例:

trayvontang的博客 2209

mybatis批量更新及插入之mysql及oracle

mybatis批量更新及插入之mysql及oracle mysql实现方式有三种, 一种用for循环通过循环传过来的参数集合,循环出N条sql, 另一种 用mysql的case when 条件判断变相的进行批量更新 还有一个是用ON DUPLICATE KEY UPDATE进行批量更新 下面进行实现。 注意第一种方法要想成功,需要在db链接url后面带一个参数 &allowMultiQueries=true 即: jdbc:mysql://localhost:3306/mysqlTest?cha

海崽的博客 640

使用Mybatis向Oracle数据库批量插入、批量更新

网上许多Mybatis向数据库批量插入、批量更新的基本都是向mysql插入、更新的,而当使用相同的方法向Oracle数据库插入、更新时,总是会出现问题报错。 mybatis映射中可以通过标签来实现Oracle的批量插入、更新和删除 标签中主要有以下属性: collection、item、index、open、separate、close collection:该属性必须指定,指代Dao层接口传递的...

西凉的悲伤博客 9632

Mybatis批量插入到MySQL和Oracle

通过Mybatis向MySQL和Oracle中批量更新数据对比

weixin_49778600的博客 972

MyBatis批量保存(Oracle)MyBatis批量插入、批量更新时,组装SQL过长会有问题,一定要根据批量插入数据量进行切割,再批次提交保存!!!

Mybatis向Oracle中批量插入数据,MyBatis批量插入、更新时,组装SQL过长会有问题,一定要根据批量插入数据量进行切割,再批次提交保存!!!

Be_insighted的博客 2419

MyBatis+Oracle批量更新、插入数据

1.批量更新 <update id="updateBaseProduct" parameterType="List"> <foreach collection="productCodes" item="item" index="index" open="begin" separator=";" close=";end;"> UPDATE t_a...

PiaoYoung's blog of 优快云 409

mybatis Oracle 批量插入、批量更新、批量查询

在使用Mybatis操作oracle数据库时,会涉及到批量操作,踩过好多的坑,留个记录吧。 1、批量插入 &lt;insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false"&gt; INSERT INTO FLB_FLIGHT_LOG_FOC ( ID,FLIGHT_...

fygkchina的专栏 6941

ORACLE 批量插入更新删除sql

SELECTSYSDATE,FROM DUALclose=";END;">SET#{item}

qq_44981598的博客 1186
上一篇: Git命令大全
下一篇: Nignx基本操作(启动、停止、重启)以及信号控制
峥嵘37
博客等级 码龄10年 73粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值