Java批量插入數(shù)據(jù)的代碼實(shí)現(xiàn)
前言
日常工作或者學(xué)習(xí)中,可能會遇到批量插入數(shù)據(jù)的需求,一般情況下數(shù)據(jù)量少的時(shí)候,我們會直接調(diào)用批量接口插入數(shù)據(jù)即可,當(dāng)數(shù)據(jù)量特別大時(shí),可能由于數(shù)據(jù)庫限制,插入的數(shù)據(jù)最多不能超過100條(假如限制100條),就算是數(shù)據(jù)庫支持一次性插入千條也會耗內(nèi)存,如果使用一條一條的插入數(shù)據(jù)庫中的話,會特別耗時(shí)間,大概是正常批量插入數(shù)據(jù)所耗時(shí)間的三倍,所以我們就會用到分批插入數(shù)據(jù)。
思路
- 我們將數(shù)據(jù)查出,放到list里面,然后將數(shù)據(jù)循環(huán),每次循環(huán)到100條,就調(diào)用批量插入接口。
代碼實(shí)現(xiàn):
@Override
public void selectData(String statisDate, String eventCode) {
List<FilterLogEntity> filterLogEntity = filterlogMapper.selectData(statisDate, eventCode);
//存儲插入數(shù)據(jù)(100條數(shù)據(jù))
List<DataLog> dataLogList = new ArrayList<>();
int nums = 100;
for (int i = 0; i < filterLogEntity.size(); i++) {
dataLogList.add(filterLogEntity.get(i));
if (i > 0 && i % nums == 0 || i == filterLogEntity.size() - 1) {
filterOraMapper.insertData(dataLogList);
//每次插入完數(shù)據(jù),將上次存儲的100條數(shù)據(jù)清空
dataLogList.clear();
}
}
}
xml中sql,此處是給oracle數(shù)據(jù)庫中插入數(shù)據(jù)
<insert id="insertData">
insert into 表名
(
a,
b,
c
)
<foreach collection="dataLogList" item="item" separator="UNION ALL">
select
#{item.a},
#{item.b},
#{item.c}
from dual
</foreach>
</insert>
給其他數(shù)據(jù)庫插入數(shù)據(jù):
<insert id="insertList" parameterType="java.util.List">
insert into 表名 (a,b,c)
VALUES
<foreach collection="dataLogList" index="index" item="item" separator="," >
(
#{item.a},
#{item.b},
#{item.c}
)
</foreach>
</insert>
后續(xù)新增:
給oracle數(shù)據(jù)庫插入數(shù)據(jù),也可以用這種方法
begin
<foreach collection="list" item="item" index="index">
insert into masakr.TB_HUMAN_SOCIAL_SECURITY@LINK33
(date_time, province, city, pr_name, pr_lingering_num, city_name, city_lingering_num,
gender_name,gender_num)
values(
#{item.dateTime},
#{item.province},
#{item.city},
#{item.prName},
#{item.prLingeringNum},
#{item.cityName},
#{item.cityLingeringNum},
#{item.genderName},
#{item.genderNum}
);
</foreach>
end;
以上就是Java批量插入數(shù)據(jù)的代碼實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于Java批量插入數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
記錄一次connection reset 錯(cuò)誤的解決全過程
這篇文章主要介紹了記錄一次connection reset 錯(cuò)誤的解決全過程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
Java實(shí)戰(zhàn)項(xiàng)目之校園跑腿管理系統(tǒng)的實(shí)現(xiàn)
只有理論是不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Springboot+vue+maven+elementui+mysql實(shí)現(xiàn)一個(gè)校園跑腿管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2022-01-01
MyBatis saveBatch 性能調(diào)優(yōu)的實(shí)現(xiàn)
本文主要介紹了MyBatis saveBatch 性能調(diào)優(yōu)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
Java Stopwatch類,性能與時(shí)間計(jì)時(shí)器案例詳解
這篇文章主要介紹了Java Stopwatch類,性能與時(shí)間計(jì)時(shí)器案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09
SpringBoot使用Redis單機(jī)版過期鍵監(jiān)聽事件的實(shí)現(xiàn)示例
在緩存的使用場景中經(jīng)常需要使用到過期事件,本文主要介紹了SpringBoot使用Redis單機(jī)版過期鍵監(jiān)聽事件的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
Springboot?HTTP如何調(diào)用其他服務(wù)
這篇文章主要介紹了Springboot?HTTP如何調(diào)用其他服務(wù),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01

