替換 MyBatis-Plus 默認(rèn)的 saveBatch的實(shí)現(xiàn)步驟
MyBatis-Plus 默認(rèn)的 saveBatch 并不是真正意義上的“批量 SQL”,而是循環(huán)調(diào)用單條 INSERT,僅在 JDBC 層啟用了 BATCH 模式。若數(shù)據(jù)庫(kù)驅(qū)動(dòng)未開(kāi)啟特定參數(shù)(如 MySQL 的 rewriteBatchedStatements=true),底層仍會(huì)逐條發(fā)送 SQL,導(dǎo)致大量網(wǎng)絡(luò)往返和數(shù)據(jù)庫(kù)解析開(kāi)銷(xiāo)。
實(shí)現(xiàn)步驟:
Mapper 接口
public interface YourMapper extends BaseMapper<YourModel> {
void insertBatch(@Param("list") List<YourModel> list);
}XML 文件(放在 resources/mapper/ 下)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yourpackage.YourMapper">
<insert id="insertBatch">
INSERT INTO your_table_name (
id,
name,
create_time
<!-- 列出所有字段 -->
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.id},
#{item.name},
#{item.createTime}
<!-- 對(duì)應(yīng)字段值 -->
)
</foreach>
</insert>
</mapper>通用批量執(zhí)行工具(基于函數(shù)式接口)
創(chuàng)建工具類BatchUtil.java
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.function.Consumer;
@Component
public class BatchUtil {
/**
* 通用分批執(zhí)行方法
*
* @param dataList 要處理的數(shù)據(jù)列表
* @param batchSize 每批大小
* @param batchAction 每批數(shù)據(jù)的處理邏輯(例如:mapper::insertBatch)
* @param <T> 數(shù)據(jù)類型
*/
public <T> void executeBatch(List<T> dataList, int batchSize, Consumer<List<T>> batchAction) {
if (dataList == null || dataList.isEmpty()) {
return;
}
for (int i = 0; i < dataList.size(); i += batchSize) {
int end = Math.min(i + batchSize, dataList.size());
batchAction.accept(dataList.subList(i, end));
}
}
}在 Service 中使用(示例)
@Autowired private BatchUtil batchUtil; batchUtil.executeBatch(list, 500, YourMapper::insertBatch);
配合 @Transactional 使用
到此這篇關(guān)于替換 MyBatis-Plus 默認(rèn)的 saveBatch的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)替換MyBatis-Plus saveBatch內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
jdbc實(shí)現(xiàn)圖書(shū)館借閱系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了jdbc實(shí)現(xiàn)圖書(shū)館借閱系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02
Java解決xss轉(zhuǎn)義導(dǎo)致轉(zhuǎn)碼的問(wèn)題
跨站腳本攻擊XSS是最普遍的Web應(yīng)用安全漏洞,本文主要介紹了Java解決xss轉(zhuǎn)義導(dǎo)致轉(zhuǎn)碼的問(wèn)題,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08
如何通過(guò)??低曉O(shè)備網(wǎng)絡(luò)SDK進(jìn)行Java二次開(kāi)發(fā)攝像頭車(chē)牌識(shí)別詳解
這篇文章主要介紹了如何通過(guò)??低曉O(shè)備網(wǎng)絡(luò)SDK進(jìn)行Java二次開(kāi)發(fā)攝像頭車(chē)牌識(shí)別的相關(guān)資料,描述了如何使用海康威視設(shè)備網(wǎng)絡(luò)SDK進(jìn)行車(chē)牌識(shí)別和圖片抓拍的開(kāi)發(fā)流程,包括遇到的問(wèn)題及其解決辦法,需要的朋友可以參考下2025-02-02
IDEA編譯報(bào)錯(cuò):Error:java:無(wú)效的源發(fā)行版:17的解決辦法
IDEA里面裝了幾個(gè)版本的JDK,導(dǎo)入工程后時(shí)不時(shí)提示一下錯(cuò)誤,下面這篇文章主要給大家介紹了關(guān)于IDEA編譯報(bào)錯(cuò):Error:java:無(wú)效的源發(fā)行版:17的解決辦法,需要的朋友可以參考下2023-01-01
Spring Cloud Ribbon實(shí)現(xiàn)客戶端負(fù)載均衡的方法
本篇文章主要介紹了Spring Cloud Ribbon實(shí)現(xiàn)客戶端負(fù)載均衡的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
Kotlin基礎(chǔ)教程之?dāng)?shù)據(jù)類型
這篇文章主要介紹了Kotlin基礎(chǔ)教程之?dāng)?shù)據(jù)類型的相關(guān)資料,需要的朋友可以參考下2017-05-05
Spring HandlerInterceptor實(shí)現(xiàn)原理代碼解析
這篇文章主要介紹了Spring HandlerInterceptor實(shí)現(xiàn)原理代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
SpringBoot讀取Resource目錄下文件的四種方式總結(jié)
在Spring?Boot項(xiàng)目中,經(jīng)常需要獲取resources目錄下的文件,這些文件可以包括配置文件、模板文件、靜態(tài)資源等,本文將介紹四種常用的方法來(lái)獲取resources目錄下的文件,需要的朋友可以參考下2023-08-08

