亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程

 更新時間:2021年04月16日 09:13:50   作者:大造夢家  
這篇文章主要介紹了詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

數(shù)據(jù)庫 在使用mybatis插入大量數(shù)據(jù)的時候,為了提高效率,放棄循環(huán)插入,改為批量插入,mapper如下:

package com.lcy.service.mapper;

import com.lcy.service.pojo.TestVO;
import org.apache.ibatis.annotations.Insert;

import java.util.List;

public interface TestMapper {

    @Insert("")
    Integer testBatchInsert(List list);
}

實體類:

package com.lcy.service.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class TestVO {

    private String t1;

    private String t2;

    private String t3;

    private String t4;

    private String t5;

}

測試類如下:

import com.lcy.service.TestApplication;
import com.lcy.service.mapper.TestMapper;
import com.lcy.service.pojo.TestVO;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.ArrayList;
import java.util.List;

@SpringBootTest(classes = TestApplication.class)
@RunWith(SpringRunner.class)
public class TestDemo {

    @Autowired
    private TestMapper testMapper;

    @Test
    public void insert() {
        List list = new ArrayList<>();
        for (int i = 0; i < 200000; i++) {
            list.add(new TestVO(i + "," + i, i + "," + i, i + "," + i, i + "," + i, i + "," + i));
        }
        System.out.println(testMapper.testBatchInsert(list));
    }

}

為了復現(xiàn)bug,我限制了JVM內(nèi)存:

執(zhí)行測試類報錯如下:

java.lang.OutOfMemoryError: Java heap space

 at java.base/java.util.Arrays.copyOf(Arrays.java:3746)

可以看到,Arrays在申請內(nèi)存的時候,導致棧內(nèi)存溢出

改進方法,分批新增:

import com.lcy.service.TestApplication;
import com.lcy.service.mapper.TestMapper;
import com.lcy.service.pojo.TestVO;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.swing.*;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

@SpringBootTest(classes = TestApplication.class)
@RunWith(SpringRunner.class)
public class TestDemo {

    @Autowired
    private TestMapper testMapper;

    @Test
    public void insert() {
        List list = new ArrayList<>();
        for (int i = 0; i < 200000; i++) {
            list.add(new TestVO(i + "," + i, i + "," + i, i + "," + i, i + "," + i, i + "," + i));
        }
        int index = list.size() / 10000;
        for (int i=0;i< index;i++){
            //stream流表達式,skip表示跳過前i*10000條記錄,limit表示讀取當前流的前10000條記錄
            testMapper.testBatchInsert(list.stream().skip(i*10000).limit(10000).collect(Collectors.toList()));
        }
    }
}

還有一種方法是調(diào)高JVM內(nèi)存,不過不建議使用,不僅吃內(nèi)存,而且數(shù)據(jù)量過大會導致sql過長報錯

到此這篇關(guān)于詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程的文章就介紹到這了,更多相關(guān)mybatis批量插入10萬數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot 自定義LocaleResolver實現(xiàn)切換語言

    springboot 自定義LocaleResolver實現(xiàn)切換語言

    我們在做項目的時候,往往有很多項目需要根據(jù)用戶的需要來切換不同的語言,使用國際化就可以輕松解決。這篇文章主要介紹了springboot 自定義LocaleResolver切換語言,需要的朋友可以參考下
    2019-10-10
  • 解決idea配置Tomcat Deployment沒有artifact選項的問題

    解決idea配置Tomcat Deployment沒有artifact選項的問題

    今天在配置的時候tomcat deployment中卻找不到artifact,沒有artifact就不能打成war包上傳到服務器了,那么怎么解決沒有artifact選項的問題呢,今天通過本文給大家分享idea配置Tomcat Deployment沒有artifact選項的解決方案,一起看看吧
    2023-10-10
  • springmvc九大組件之HandlerAdapter詳解

    springmvc九大組件之HandlerAdapter詳解

    這篇文章主要介紹了springmvc九大組件之HandlerAdapter詳解,RequestMappingHandlerAdapter支持的handler的類型是HandlerMethod,而HandlerMethod是通過解析@RequestMapping注解獲得的,需要的朋友可以參考下
    2023-11-11
  • Java中后臺線程實例解析

    Java中后臺線程實例解析

    這篇文章主要介紹了Java中后臺線程實例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • idea啟動springboot報錯: 找不到或無法加載主類問題

    idea啟動springboot報錯: 找不到或無法加載主類問題

    這篇文章主要介紹了idea啟動springboot報錯: 找不到或無法加載主類問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 淺析Java 并發(fā)編程中的synchronized

    淺析Java 并發(fā)編程中的synchronized

    這篇文章主要介紹了Java 并發(fā)編程中的synchronized的相關(guān)資料,幫助大家更好的理解和學習Java并發(fā)編程,感興趣的朋友可以了解下
    2020-12-12
  • Java中截取字符串方法的兩種用法

    Java中截取字符串方法的兩種用法

    這篇文章主要給大家介紹了關(guān)于Java中截取字符串方法的兩種用法,在Java開發(fā)中經(jīng)常會涉及到對字符串進行截取操作,字符串截取是一種常見且重要的字符串處理技巧,可以根據(jù)實際需求獲取字符串的指定部分,需要的朋友可以參考下
    2023-09-09
  • Java中守護線程介紹及使用

    Java中守護線程介紹及使用

    大家好,本篇文章主要講的是Java中守護線程介紹及使用,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Mybatisplus主鍵生成策略算法解析

    Mybatisplus主鍵生成策略算法解析

    這篇文章主要介紹了Mybatisplus主鍵生成策略算法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Java 中校驗時間格式的常見方法

    Java 中校驗時間格式的常見方法

    在實際項目開發(fā)中,跟時間參數(shù)打交道是必不可少的,為了保證程序的安全性、健壯性,一般都會對參數(shù)進行校驗,其他類型的參數(shù)校驗很好實現(xiàn),那你知道時間參數(shù)的是怎么校驗的嗎,下面給大家分享Java 中校驗時間格式的方法,感興趣的朋友跟隨小編一起看看吧
    2024-08-08

最新評論