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()