mybatis只提供了單條數據的插入,要批量插入數據我們可以使用循環一條條的插入,但是這樣做的效率太低下,每插入一條數據就需要提交一次,如果數據量幾百上千甚至更多,插入性能往往不是我們能接受的,如下例子可以成功的使用序列往oracle批量插入數據,
mapper映射文件代碼如下:
<insert id="saveList" parameterType="java.util.List">
insert into ph_org_store(id,commorgid,areaid,detailname,address,city,shopkeeper,managemodel,ybmode,tel,fax,createuserid,createtime)
select ui_hisiris_apply.NEXTVAL, A.* from(
<foreach collection="list" item="item" index="index"
separator="UNION ALL">
SELECT
#{item.commOrgId,jdbcType=VARCHAR},
#{item.areaid,jdbcType=VARCHAR},
#{item.detailName,jdbcType=VARCHAR},
#{item.address,jdbcType=VARCHAR},
#{item.city,jdbcType=VARCHAR},
#{item.shopKeeper,jdbcType=VARCHAR},
#{item.manageModel,jdbcType=VARCHAR},
#{item.ybMode,jdbcType=VARCHAR},
#{item.tel,jdbcType=VARCHAR},
#{item.fax,jdbcType=VARCHAR},
#{item.createuserid,jdbcType=VARCHAR},
#{item.createtime,jdbcType=DATE}
from dual
</foreach>
) A
</insert>
在此要說明的是,如果不指定 jdbcType ,如果數據為空的情況下,即時數據庫允許為空依然會報異常,因為mybatis並不能識別並對空值進行轉換。union 是合並提交 或者可以使用union all,區別在於union all 允許重復的數據插入,前者將會自動過濾掉。
