ibatis批处理提高性能

ibatis循环处理与批处理--以插入操作为例

1.循环处理

循环操作的ibatis配置

<!-- 插入一条记录 -->
  <insert id="insertUser" parameterClass="User">
  	<![CDATA[
  		insert into user(
  			id,
  			userName,
  			passWord
  		)values(
  			#id#,
  			#userName#,
  			#passWord#
  		)
  	]]>
  </insert>


循环操作的Junit测试

/**
	 * 循环插入一条用户记录
	 * @throws Exception
	 */
	public void insertTest() throws Exception{
		Long oldTime = System.currentTimeMillis();
		//System.out.println(oldTime);
		for(int i= 0; i < 10000 ; i++){
			User user = new User();
			user.setId(String.valueOf(i));
			user.setUserName("用户"+ i);
			user.setPassWord("user"+ i);
			new UserDaoImpl().insert(user);
			System.out.println(i);
		}
		System.out.println("循环插入多条记录所花费的时间:"+ (System.currentTimeMillis()-oldTime)/1000.00 +"s");
	}


2.批处理

批处理的ibatis配置

<!-- 插入多条记录 -->
  <insert id="insertUserList" parameterClass="java.util.List">
  	<![CDATA[
  		insert into user(
  			id,
  			userName,
  			passWord
  		) values
  	]]>
  	<iterate conjunction=",">
  	<![CDATA[
  		(
  			#list[].id#,
  			#list[].userName#,
  			#list[].passWord#
  		)
  	]]>
  	</iterate>
  </insert>


批处理Junit测试

/**
	 * 插入多条记录 --快
	 * @throws Exception
	 */
	public void insertListTest() throws Exception{
		Long oldTime = System.currentTimeMillis();
		//System.out.println(oldTime);
		List<User> users = new ArrayList<User>();
		for(int i=0; i< 10000; i++){
			User user = new User();
			user.setId(String.valueOf(i));
			user.setUserName("用户"+ i);
			user.setPassWord("user"+ i);
			users.add(user);
			System.out.println(i);
		}
		new UserDaoImpl().insertList(users);
		System.out.println("一次插入多条记录所花费的时间:"+ (System.currentTimeMillis()-oldTime)/1000.00 +"s");
	}


从上面的例子能够测试出批处理的性能高于循环处理的性能。在实际的项目中,对于一次需要插入多条数据,应该使用批处理。

猜你喜欢

转载自guchao2012.iteye.com/blog/1456459