MyBatis原始碼分析(三)批量更新

2021-08-26 14:00:53 字數 1761 閱讀 4225

主要是org.apache.ibatis.executor.batchexecutor這個類,此類繼承baseexecutor(基本增刪改查,快取,懶載入處理)

batchexecutor這個類有四個屬性

//批處理更新最大返回結果 

public static final int batch_update_return_value = integer.min_value + 1002;

//存放宣告(命令)物件集合

private final liststatementlist = new arraylist();

// 批處理結果集合

private final listbatchresultlist = new arraylist();

//當前sql語句

private string currentsql;

乙個帶引數建構函式,傳入配置資訊和事務物件

public batchexecutor(configuration configuration, transaction transaction)
重寫了三個方法, 1.更新方法  2.查詢方法 3.重新整理方法

我們來看批量更新doupdate

throws sqlexception else

handler.parameterize(stmt);

handler.batch(stmt);

return batch_update_return_value;}

最重要一句話就是handler.batch(stmt),實際上就是stmt.addbatch();

舉個小例子來說明:

//記錄1

stmt.setint(1, 1);

stmt.setstring(2, "cujo");

stmt.addbatch();

//記錄2

stmt.setint(1, 2);

stmt.setstring(2, "fred");

stmt.addbatch();

//記錄3

stmt.setint(1, 3);

stmt.setstring(2, "mark");

stmt.addbatch();

//批量執行上面3條語句

int counts = statement.executebatch();

//commit it

connection.commit();

如果專案中要用到批量更新如何使用?

下面的對映檔案,假設namespace="com.dao.stuent"

select current_timestamp() 

insert into kangaiduoyaodian ( depart1, depart2, product_name,

generic_name, img, product_specification, unit,

website, fetch_time, productdesc ) values

( #, #, #,

#, #,

#, #,

#, #, #,

#, # )

呼叫:  sqlsession session = factory.opensession(executortype.batch); //關鍵是這句

原文:

mybatis原始碼閱讀之9 批量插入資料

在做專案的工程中,遇到過各種mybatis批量插入資料的需求。在各種水平的架構師提供的框架封裝中,也出現了好幾種對批量處理的不同封裝。根據我看過的 大致可以分三種情況。autowired for entertypedo d list 這是一種完全不負責任的做法,資料量大到一定級別時,插入很慢,而且可...

Elasticsearch(三) 批量操作

語法 什麼是partial update?put index type id,建立文件 替換文件,就是一樣的語法 一般對應到應用程式中,每次的執行流程基本是這樣的 1 應用程式先發起乙個get請求,獲取到document,展示到前台介面,供使用者檢視和修改 2 使用者在前台介面修改資料,傳送到後台 ...

Mybatis 原始碼分析

mybatis解析 2 sqlsessionfactorybean 繼承了 initializingbean 介面,在bean解析的finishbeanfactoryinitialization 的方法對 initializingbean介面中的 afterpropertiesset 方法進行呼叫,...