mybatis中使用Oracle和mysql的批量插入區別
阿新 • • 發佈:2018-11-19
在做excel匯入的時候需要用到批量匯入,以前沒用過oracle資料庫,使用過程中才發現mysql的寫法在oracle中是不正確的。
先介紹下foreach 中屬性的表達意思:
1、 collection :collection屬性的值有三個分別是list、array、map三種,分別對應的引數型別為:List、陣列、map集合。
2、item : 表示在迭代過程中每一個元素的別名。
3、index :表示在迭代過程中每次迭代到的位置
4、open :字首
5、close :字尾
6、separator :分隔符,表示迭代時每個元素之間以什麼分隔
先上一下mybatis中foreach的程式碼:
<insert id="saveList" parameterType="java.util.List"> INSERT INTO mds_quota_detail( id, mds_quota_id, serial, mds_item_id, item_code, item_name, normal_field, model_num, specs, quota, mds_unit_id, classify, remarks ) VALUES <foreach collection="list" item="MdsQuotaDetail" index="index" separator="," > ( #{id}, #{mdsQuotaId}, #{serial}, #{itemId}, #{itemCode}, #{itemName}, #{normalField}, #{modelNum}, #{specs}, #{quota}, #{mdsUnitId}, #{classify}, #{remarks} ) </foreach> </insert>
oracle中foreach的程式碼:
<insert id="saveList" parameterType="java.util.List"> INSERT INTO mds_quota_detail( id, mds_quota_id, serial, mds_item_id, item_code, item_name, normal_field, model_num, specs, quota, mds_unit_id, classify, remarks ) <foreach collection="list" item="MdsQuotaDetail" index="index" separator="UNION ALL" > ( SELECT #{MdsQuotaDetail.id}, #{MdsQuotaDetail.mdsQuotaId}, #{MdsQuotaDetail.serial}, #{MdsQuotaDetail.itemId}, #{MdsQuotaDetail.itemCode}, #{MdsQuotaDetail.itemName}, #{MdsQuotaDetail.normalField}, #{MdsQuotaDetail.modelNum}, #{MdsQuotaDetail.specs}, #{MdsQuotaDetail.quota}, #{MdsQuotaDetail.mdsUnitId}, #{MdsQuotaDetail.classify}, #{MdsQuotaDetail.remarks} FROM dual ) </foreach> </insert>
總結:1、在oracle中是沒有values的。
2、在oracle中separator的值為union all,mysq'中是","。
3、在oracle中foreach中使用SELECT ... FROM dual。
4、在foreach中#{屬性值},oracle中必須是item的值點屬性。
如有哪裡不對的地方,歡迎在評論裡指出