Mybatis批量插入Oracle数据库

前言

有人说:做前端开发就两个发展方向,一个向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>

猜你喜欢

转载自blog.csdn.net/Doniet/article/details/78858770