1. 程式人生 > >mybatis中使用Oracle和mysql的批量插入區別

mybatis中使用Oracle和mysql的批量插入區別

 在做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的值點屬性。

如有哪裡不對的地方,歡迎在評論裡指出