Mybatis批量插入Oracle数据库
程序员文章站
2022-05-10 19:58:56
...
前言
有人说:做前端开发就两个发展方向,一个向UI方向发展,将页面美化到极致;另一个就是全栈开发,数据库、WEB接口后台,甚至H5与客户端混合开发,你都得知道。想想都觉得我的人生都用在学习新东西上了。
作为一个混在WEB前端开发的菜鸟,我自己开发过一些React组件、Vue组件,实现过类似Express框架的路由,玩过基于jQuery实现的router…这还差点什么?最近接触到WEB后台开发,我似乎找到了方向,玩一下基于SSM的后台接口开发。
问题
将数据批量插入Oracle数据库中:
//xxxmapper.xml
....
<insert id="addAnswer" useGeneratedKeys="false" parameterType="java.util.List">
<selectKey resultType="int" keyProperty="answerId" keyColumn="ID" order="BEFORE">
SELECT ANSWER_SEQ.NEXTVAL a FROM DUAL
</selectKey>
INSERT INTO TBS_ANSWER (ID,ISSUEID,TOPIC) VALUES
<foreach item="item" collection="list" separator=",">
(#{answerId}, #{item.issueId}, #{item.topic})
</foreach>
</insert>
.....
结果:
### The error may exist in file [D:\JavaWebSpace\ease\target\classes\mapper\SUREYMAPPER.xml]
### The error may involve com.ease.mapper.SurveyMapper.addAnswer-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO TBS_ANSWER (ID,ISSUEID,TOPIC) VALUES (?, ?, ?),(?, ?, ?)
### Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束
各种折腾,还是没有结果;最后在Stack Overflow和CSDN上找到解决方案。
方案
修改xxxmapper.xml:
<insert id="addAnswer" useGeneratedKeys="false" parameterType="java.util.List">
INSERT INTO TBS_ANSWER (
ID,ISSUEID,TOPIC
)
SELECT ANSWER_SEQ.NEXTVAL,TBS.* from(
<foreach collection="list" item="item" index="index" close=")" open="(" separator="union">
SELECT
#{item.issueId,jdbcType=NUMERIC},
#{item.topic,jdbcType=VARCHAR}
from dual
</foreach>
) TBS
</insert>
上一篇: Web前端学习笔记——Canvas 01
下一篇: Mybatis批量插入Oracle数据库