1. 程式人生 > 其它 >MyBatis_Mybatis之批量操作

MyBatis_Mybatis之批量操作

技術標籤:MyBatisMyBatis批量操作資料庫持久化操作

1.引入

MyBatis作為操作資料庫的一個框架,批量操作是我們在開發中經常需要使用到的。下面我們就一起來學習一下如何使用MyBatis進行資料的批量操作。

2.如何使用MyBatis實現批量操作

我們之前學習過使用foreach遍歷,然後通過不斷的新增sql語句拼湊成一條較長的語句轉給我們的資料庫。如下:

<!-- 批量儲存 -->
<!--public void addEmps(@Param("emps")List<Employee> emps);  -->
<!--MySQL下批量儲存:可以foreach遍歷   mysql支援values(),(),()語法-->
<insert id="addEmps">
	 insert into tbl_employee(
	 	<include refid="insertColumn"></include>
	 ) 
	 values
	<foreach collection="emps" item="emp" separator=",">
	  (#{emp.lastName},#{emp.email},#{emp.gender},#{emp.dept.id})
	</foreach>
</insert>

但是,我們發現這其實不是真正的實現了批量的操作,因為它其實就是把語句合併成為一條較長的語句,並沒有達到批量的效果。如果我們要使用MyBatis實現資料的批量操作,那麼我們應該使用的是:defaultExecutorType,內容如下:

3.批量操作的實現(新增操作測試)

(1).在對映檔案中新增資料庫新增的sql

<insert id="addUs" useGeneratedKeys="true" keyProperty="id">
		insert into tb_us(username,password) 
		values(#{username},#{password})
</insert>

(2).其他的相關操作不變。

(3).編寫批量操作的相關程式碼

public void testBatch() throws IOException{
		
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		
		//可以執行批量操作的sqlSession
		SqlSession openSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
		long startTime = System.currentTimeMillis();
		try{
			UserMapper mapper = openSession.getMapper(UserMapper.class);
			for (int i = 0; i < 10000; i++) {
				mapper.addUs(new User(UUID.randomUUID().toString().substring(0, 5), 
                "1234"));
			}
			openSession.commit();
			long endTime = System.currentTimeMillis();
			System.out.println("操作時長:"+(endTime - startTime));
		}finally{
			openSession.close();
		}
}
	
	

(4).測試程式碼:

沒有使用批量操作的時候執行1w條記錄的插入操作使用:它的操作是:(預編譯sql=設定引數=執行)==》10000 12161

使用批量操作:它的操作是:(預編譯sql一次==>設定引數===>10000次===>執行(1次))