Java批量插入數(shù)據(jù)的代碼實現(xiàn)
前言
日常工作或者學習中,可能會遇到批量插入數(shù)據(jù)的需求,一般情況下數(shù)據(jù)量少的時候,我們會直接調(diào)用批量接口插入數(shù)據(jù)即可,當數(shù)據(jù)量特別大時,可能由于數(shù)據(jù)庫限制,插入的數(shù)據(jù)最多不能超過100條(假如限制100條),就算是數(shù)據(jù)庫支持一次性插入千條也會耗內(nèi)存,如果使用一條一條的插入數(shù)據(jù)庫中的話,會特別耗時間,大概是正常批量插入數(shù)據(jù)所耗時間的三倍,所以我們就會用到分批插入數(shù)據(jù)。
思路
- 我們將數(shù)據(jù)查出,放到list里面,然后將數(shù)據(jù)循環(huán),每次循環(huán)到100條,就調(diào)用批量插入接口。
代碼實現(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ù)的代碼實現(xiàn)的詳細內(nèi)容,更多關(guān)于Java批量插入數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java實戰(zhàn)項目之校園跑腿管理系統(tǒng)的實現(xiàn)
只有理論是不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Springboot+vue+maven+elementui+mysql實現(xiàn)一個校園跑腿管理系統(tǒng),大家可以在過程中查缺補漏,提升水平2022-01-01MyBatis saveBatch 性能調(diào)優(yōu)的實現(xiàn)
本文主要介紹了MyBatis saveBatch 性能調(diào)優(yōu)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07SpringBoot使用Redis單機版過期鍵監(jiān)聽事件的實現(xiàn)示例
在緩存的使用場景中經(jīng)常需要使用到過期事件,本文主要介紹了SpringBoot使用Redis單機版過期鍵監(jiān)聽事件的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-07-07Springboot?HTTP如何調(diào)用其他服務(wù)
這篇文章主要介紹了Springboot?HTTP如何調(diào)用其他服務(wù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01