1. 程式人生 > 其它 >mybatis 操作 mysql 大批量插入,資料分頁處理

mybatis 操作 mysql 大批量插入,資料分頁處理

/**
* 大批量插入,資料分頁處理
*
* @param tableName 臨時表名稱
* @param mapHead 臨時表屬性 Map,key = 臨時表字段屬性, value = 具體值。此處 value 沒有使用
* @param mapList 臨時表的大批量資料
*/
private void pageDate(String tableName, Map<String, Object> mapHead, List<HashMap<String, Object>> mapList) {

//測試(大批量插入):條數-耗時:6300-2s,16800-5s24000-7s 67300-18s
for (int i = 0, j = 0, amount = 3000; i < mapList.size(); i += amount) {
j = i + amount;
//amount可取值3000/5000/10000/。。。測看大批量效果。
try {
if (j < mapList.size()) {
insertBatchList(tableName, mapHead, mapList.subList(i, mapList.size()));
} else {
insertBatchList(tableName, mapHead, mapList.subList(i, mapList.size()));
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}

}

/**
* 批量插入資料
*
* @param tableName 臨時表名稱
* @param mapHead 臨時表屬性 Map,key = 臨時表字段屬性, value = 具體值。此處 value 沒有使用
* @param list 臨時表分頁後的批量資料
*/
private void insertBatchList(String tableName, Map<String, Object> mapHead, List<HashMap<String, Object>> list) {
HashMap<String, Object> map = new HashMap<>();
map.put("tableName", tableName);
map.put("mapHead", mapHead);
map.put("list", list);
reportAllSqlMapper.insertBatchTableListDynamic(map);
}


mybatis mapper 層介面
/**
* 批量插入資料
* @param map
*/
void insertBatchTableListDynamic(@Param("map")HashMap<String,Object> map);


mybatis xml
<insert id="insertBatchTableListDynamic" parameterType="java.util.HashMap">
insert into
${map.tableName}
(
<foreach collection="map.mapHead" index="key" item="value"
separator=",">
`${key}`
</foreach>
)
values
<foreach collection="map.list" item="line" separator=",">
(
<foreach collection="line" index="key" item="value"
separator=",">
#{value}
</foreach>
)
</foreach>
</insert>


作者:天下沒有收費的bug 出處:https://www.cnblogs.com/LoveBB/ 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須在文章頁面給出原文連結,否則保留追究法律責任的權利。