欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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>
相关标签: 数据库 oracle