mybatis批量插入mysql的方法比较常规

一般都是批量插入list和array

<insert id="allinsert" parameterType="java.util.List">
        insert into ZHYY_SDLR
        (id, lrid, usage, tknumber, createtime, kind)
        values
            <foreach collection="list" item="item" index= "index" separator =",">
                (#{item.id},
                #{item.lrid},
                #{item.usage},
                #{item.tknumber},
                #{item.createtime},
                #{item.kind})
            </foreach>
 </insert>

collection代表传入的是list,如果是数组就写array,一般就直接写传的参数。item就是别名, separator指不一样的value之间的分隔符。

但是oracle的批量插入有所不同,按照上面的写法就会报“命令未执行结束”错误
正确写法:

<insert id="allinsert" parameterType="java.util.List">
        insert into ZHYY_SDLR
        (id, lrid, usage, tknumber, createtime, kind)
        select t.* from
        (
            <foreach collection="list" item="item" separator="union all">
            select  #{item.id},
                    #{item.lrid},
                    #{item.usage},
                    #{item.tknumber},
                    #{item.createtime},
                    #{item.kind} 
                    from dual
            </foreach>
        ) t
</insert>

和上一个不同的是,separator应使用union all,并且用select * from dual 语句代替values()

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐