Mybatis中实现oracle的批量插入、更新
来源:互联网 发布:网络摄像头忘记密码 编辑:程序博客网 时间:2024/05/18 13:10
### 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) SelectSEQ_Guide_Video.NEXTVAL ,#{guideId}, video.*From( <foreach collection="arrGuideVideo" item="videoId" index="index" separator="union all"> Select#{videoId} videoIdFrom 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中实现oracle的批量插入、更新
- 基于MyBatis的批量插入更新实现
- mybatis+oracle批量插入,批量更新
- MyBatis中批量插入和批量更新
- Mybatis+Oracle进行数据的批量插入和更新
- Oracle数据库 Mybatis批量插入,更新
- MyBatis中批量插入、删除、更新
- Mybatis批量插入、更新
- 批量插入数据(基于Mybatis的实现-Oracle)
- Mybatis 批量插入、批量更新
- mybatis的批量插入与更新
- Mybatis的批量插入与更新
- mybatis 在oracle中批量插入
- Oracle批量插入(Mybatis中)
- Oracle数据库中Mybatis批量插入数据
- myBatis 批量插入oracle
- mybatis oracle 批量插入
- android有序广播的实现
- Android Studio一直处于Building的解决方法
- 两类背包问题
- DecimalFormat对数值格式化的舍入问题——RoundingMode
- 数据库事务、并发、锁那些事
- Mybatis中实现oracle的批量插入、更新
- HTTPS认识(二)证书
- firewall-cmd常用语法速记
- VFS之基本数据结构
- 解决Gson 处理Map将整型处理为浮点型的问题
- 使用ffmpeg进行音视频编解码时用到的函数介绍
- mongodb维护常用命令
- 单点登录(九)-----遇到问题-----FileNotFoundException: class path resource-UsernamePasswordWrapperAuthenticatio
- 跟阿铭学Linux-笔记1:初步认识Linux