Java批量插入數(shù)據(jù)的代碼實(shí)現(xiàn)
前言
日常工作或者學(xué)習(xí)中,可能會(huì)遇到批量插入數(shù)據(jù)的需求,一般情況下數(shù)據(jù)量少的時(shí)候,我們會(huì)直接調(diào)用批量接口插入數(shù)據(jù)即可,當(dāng)數(shù)據(jù)量特別大時(shí),可能由于數(shù)據(jù)庫限制,插入的數(shù)據(jù)最多不能超過100條(假如限制100條),就算是數(shù)據(jù)庫支持一次性插入千條也會(huì)耗內(nèi)存,如果使用一條一條的插入數(shù)據(jù)庫中的話,會(huì)特別耗時(shí)間,大概是正常批量插入數(shù)據(jù)所耗時(shí)間的三倍,所以我們就會(huì)用到分批插入數(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); //存儲(chǔ)插入數(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ù),將上次存儲(chǔ)的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ù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
記錄一次connection reset 錯(cuò)誤的解決全過程
這篇文章主要介紹了記錄一次connection reset 錯(cuò)誤的解決全過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04Java實(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-01MyBatis saveBatch 性能調(diào)優(yōu)的實(shí)現(xiàn)
本文主要介紹了MyBatis saveBatch 性能調(diào)優(yōu)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Java Stopwatch類,性能與時(shí)間計(jì)時(shí)器案例詳解
這篇文章主要介紹了Java Stopwatch類,性能與時(shí)間計(jì)時(shí)器案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09Apache?Arrow?Parquet存儲(chǔ)與使用
這篇文章主要為大家介紹了Apache?Arrow?Parquet存儲(chǔ)與使用原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08SpringBoot使用Redis單機(jī)版過期鍵監(jiān)聽事件的實(shí)現(xiàn)示例
在緩存的使用場(chǎng)景中經(jīng)常需要使用到過期事件,本文主要介紹了SpringBoot使用Redis單機(jī)版過期鍵監(jiān)聽事件的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07Springboot?HTTP如何調(diào)用其他服務(wù)
這篇文章主要介紹了Springboot?HTTP如何調(diào)用其他服務(wù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01