ibatis对MySQL数据库的批量操作

对于批量操作,iBATIS提供了两种方式:

    使用iterate标签,进行批量插入操作;

    使用普通的SQL调用,提交时使用batch提交。

下面一一介绍:

1、使用iterate标签,进行批量插入操作

   将需要插入的Java Object封装到一个java.util.List集合中,然后调用SQL插入。这种方式主要利用iBATIS提供的iterate标签。例子如下:(下面例子中的list只是一个别名,可以更改)

可参考:http://patternhe.iteye.com/blog/960441

<insert id="addList" parameterClass="java.util.List">
	<![CDATA[ 
		insert into t_test(field1, field2, field3)values 
	]]>  
	<iterate conjunction=",">  
		<![CDATA[ 
			(#list[].field1#, #list[].field2#, #list[].field3#)
		]]>  
	</iterate>  
</insert>
2、使用batch提交方式

      这个需要修改Dao层方法,下面代码是修改后的dao层代码,入参list为需要进行批量操作的Java Object集合,入参sqlId是要对list集合中每个对象要进行的操作的SQL(sqlId为iBATIS XML配置文件中的SQL对应的id)。例如SQL要进行更新操作,那么调用这个批量操作,会对list中的各个对象分别进行更新操作。

注意下面代码中的getSqlMapClient方法,使用iBATIS项目中应该都会注入这个对象。

可参考:http://salouhim.iteye.com/blog/1124661

public void batchOpt(final List<Object> list, final String sqlId ) throws Exception
{
	SqlMapClient smc = etSqlMapClient();
	SqlMapClientTemplate client = new SqlMapClientTemplate();
	client.setSqlMapClient(smc);
	client.execute(new SqlMapClientCallback<Object>() {
		public Object doInSqlMapClient(SqlMapExecutor exec)
				throws SQLException {
			exec.startBatch();
			final int batchSize = 100;
			for (int i = 0; i < list.size(); i++) 
			{
				exec.insert(sqlId, list.get(i));
				
				if (i % batchSize == 0)
				{
					exec.executeBatch();
				}
			}
			exec.executeBatch();
			return null;
		}
		
	});
}
批量操作调用的SQL

<update id="updateObj" parameterClass="list集合中对象的类型">
	update t_test set field1 = #field1# , field2 = #field2# where field3 = #field3#
</update>




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值