ibatis combined with Oracle's iterate insert batch insert

ibatis batch insert into oracle database

<insert id="batchInsert" parameterClass="java.util.List">
	INSERT INTO SYS_ROLE_MENU(
	ROLE_ID,	
	MENU_ID	
		)
	SELECT A.*
	FROM (
		<iterate  conjunction ="union all" >
		SELECT
			#list[].key# as ROLE_ID,
			#list[].value# as MENU_ID
		from dual
		</iterate >
	  ) A
	</insert>

   java code

	   /**
		* Bulk insert function
		*/
	   @SuppressWarnings("unchecked")
	   public void updateBatch(final List<ListKeyValue> list, String roleId) {
		   SqlMapClient sqlMapClientTemplate = baseDao.getSqlMapClient();
		   try {
			   sqlMapClientTemplate.startTransaction();//Start transaction
			   /**Transaction todo start***/
			   /**First execute delete all**/
			   Map<String,Object> deleteParamMap=new HashMap<>();
			   deleteParamMap.put("id",roleId.split(","));
			   sqlMapClientTemplate.delete("delete",deleteParamMap);
			   sqlMapClientTemplate.insert("batchInsert",list);
			   /**Transaction todo end***/
			   sqlMapClientTemplate.commitTransaction();//Commit the transaction
		   } catch (SQLException e) {
			   e.printStackTrace ();
		   }finally {
			   try {
				   sqlMapClientTemplate.endTransaction();//The transaction is completed
			   } catch (SQLException e) {
				   try {
					   sqlMapClientTemplate.getCurrentConnection().rollback(); //Transaction rollback
				   } catch (SQLException e1) {
					   e1.printStackTrace();
				   }
				   e.printStackTrace ();
			   }
		   }

	   }

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326076849&siteId=291194637