Ibatis批量插入

对于Ibatis的批量插入:

(1)在代码中,BATCH_BASE 与数据库能够打开最大的游标数目有关 ,我认为这种比较好

/**
 * 批量插入数据
 * @param list
 */
public void insertBatch(final List<TranRec> list) {
	if (list != null) {
		SqlMapClientCallback callback = new SqlMapClientCallback() {

			public Object doInSqlMapClient(SqlMapExecutor executor)
					throws SQLException {
				int size = list.size();
				int loopMax = ((size - 1) / BatchNum.BATCH_BASE + 1) * BatchNum.BATCH_BASE;

				for (int i = 0; i < loopMax; i++) {
					executor.startBatch();
					for (int j = 0, index = i * BatchNum.BATCH_BASE; (j < BatchNum.BATCH_BASE && index < size); j++, index++) {
						executor.insert("TRAN_REC.insertSelective", list.get(index));
					}
					executor.executeBatch();
				}

				return null;
			}
		};
		this.getSqlMapClientTemplate().execute(callback);
	}
}

(2)在xml中   这种慎用,数据量大时执行有问题

<insert id="CHECK_DIFF.insertBatch" parameterClass="java.util.List">
	 INSERT All 
		<iterate conjunction=" ">  
		  INTO  CHECK_DIFF
			(
			TRAN_REC_ID, 
			 WORK_DATE, 
			 TRAN_DATE, 
			 ORG_ID, 
			 MER_ID, 
			 STOR_ID, 
			 PLATFORM, 
			 TERM_ID, 
			 TRAN_CODE, 
			 TRAN_DESC, 
			 TRACE_NUM, 
			 BATCH_NUM, 
			 CARD_NO, 
			 TRAN_AMT, 
			 FEE_AMT, 
			 TRAN_AMT1, 
			 TRAN_AMT2, 
			 TRAN_AMT3, 
			 TRAN_AMT4, 
			 AUTH_CODE, 
			 REFERENCE_NUM, 
			 HOST_TRACE_NUM, 
			 CD_FLAG, 
			 ORIGINAL_TRAN_DATE, 
			 ORIGINAL_BATCH_NUM, 
			 ORIGINAL_TRACE_NUM, 
			 ORIGINAL_REFER_NUM, 
			 ORIGINAL_TRAN_REC_ID, 
			 RESERVE1, 
			 RESERVE2, 
			 RESERVE3, 
			 RESERVE4, 
			 RESERVE5, 
			 RESERVE6
		 )
		VALUES		
		(
			#list[].tranRecId#, 
			#list[].workDate#,
			#list[].tranDate#,
			#list[].orgId#,
			#list[].merId#,
			#list[].storId#,
			#list[].platform#,
			#list[].termId#,
			#list[].tranCode#,
			#list[].tranDesc#,
			#list[].traceNum#,
			#list[].batchNum#,
			#list[].cardNo#,
			#list[].tranAmt#,
			#list[].feeAmt#,
			#list[].tranAmt1#,
			#list[].tranAmt2#,
			#list[].tranAmt3#,
			#list[].tranAmt4#,
			#list[].authCode#,
			#list[].referenceNum#,
			#list[].hostTraceNum#,
			#list[].cdFlag#,
			#list[].originalTranDate#,
			#list[].originalBatchNum#,
			#list[].originalTraceNum#,
			#list[].originalReferNum#,
			#list[].originalTranRecId#,
			#list[].reserve1#,
			#list[].reserve2#,
			#list[].reserve3#,
			#list[].reserve4#,
			#list[].reserve5#,
			#list[].reserve6#
			)
		</iterate>
		SELECT * FROM dual
</insert>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值