欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatisPlus中批量插入之如何通過(guò)開(kāi)啟rewriteBatchedStatements=true

 更新時(shí)間:2025年03月17日 08:38:01   作者:極客李華  
這篇文章主要介紹了MyBatisPlus中批量插入之如何通過(guò)開(kāi)啟rewriteBatchedStatements=true問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

MyBatis Plus通過(guò)開(kāi)啟rewriteBatchedStatements=true

通過(guò)開(kāi)啟rewriteBatchedStatements=true的優(yōu)點(diǎn)

在MyBatis Plus框架中,批量插入是一種高效的數(shù)據(jù)庫(kù)操作方式。

通過(guò)開(kāi)啟rewriteBatchedStatements=true,可以獲得許多優(yōu)點(diǎn),從而提高數(shù)據(jù)庫(kù)插入性能、減輕負(fù)載以及簡(jiǎn)化代碼。

1. 提高性能

傳統(tǒng)的一條記錄一次插入方式會(huì)導(dǎo)致頻繁的與數(shù)據(jù)庫(kù)服務(wù)器的交互,增加了網(wǎng)絡(luò)開(kāi)銷和處理延遲。

相比之下,通過(guò)批量插入將多個(gè)數(shù)據(jù)記錄組合成一個(gè)批處理語(yǔ)句進(jìn)行插入,減少了與數(shù)據(jù)庫(kù)服務(wù)器的交互次數(shù),顯著提高了性能。

2. 減輕負(fù)載

每條SQL語(yǔ)句在數(shù)據(jù)庫(kù)服務(wù)器上都需要進(jìn)行解析、驗(yàn)證和執(zhí)行等操作,這些操作會(huì)占用系統(tǒng)資源并且耗費(fèi)時(shí)間。

通過(guò)批量插入,將多條INSERT語(yǔ)句合并為一條語(yǔ)句執(zhí)行,減少了對(duì)數(shù)據(jù)庫(kù)的負(fù)載,提高了整體的系統(tǒng)響應(yīng)速度。

3. 事務(wù)支持

MyBatis Plus中的批量插入默認(rèn)會(huì)開(kāi)啟事務(wù)管理。

在批量插入過(guò)程中,如果遇到插入錯(cuò)誤,整個(gè)批量插入操作會(huì)回滾,確保數(shù)據(jù)的一致性,使用務(wù)支持是非常重要的,它可以有效地防止數(shù)據(jù)插入過(guò)程中出現(xiàn)意外情況導(dǎo)致數(shù)據(jù)不一致或丟失。

4. 簡(jiǎn)化代碼

使用傳統(tǒng)的逐條插入方式,需要手動(dòng)編寫(xiě)循環(huán)語(yǔ)句來(lái)遍歷數(shù)據(jù)集合,并逐個(gè)執(zhí)行插入操作。而通過(guò)批量插入,可以直接將整個(gè)數(shù)據(jù)集合傳遞給數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序進(jìn)行處理,減少了編碼復(fù)雜度和工作量。這樣簡(jiǎn)化的代碼邏輯使得開(kāi)發(fā)更加高效。

綜上所述,通過(guò)開(kāi)啟rewriteBatchedStatements=true使用MyBatis Plus中的批量插入功能帶來(lái)了諸多優(yōu)點(diǎn)。它不僅提高了數(shù)據(jù)庫(kù)操作性能、減輕了負(fù)載,也支持事務(wù)管理,并且簡(jiǎn)化了代碼邏輯。這種功能在處理大量數(shù)據(jù)插入的場(chǎng)景中非常有價(jià)值和實(shí)用。

實(shí)現(xiàn)方法

在使用MyBatis Plus的項(xiàng)目中,我們需要在配置文件中進(jìn)行相應(yīng)的配置來(lái)開(kāi)啟rewriteBatchedStatements=true。

下面是一個(gè)示例的配置示例:

# application.properties 或者 application.yml(根據(jù)你的配置文件類型)
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase?rewriteBatchedStatements=true
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

在上述配置中,spring.datasource.url選項(xiàng)設(shè)置了數(shù)據(jù)庫(kù)連接的URL,并通過(guò)rewriteBatchedStatements=true開(kāi)啟了MySQL驅(qū)動(dòng)程序的批量處理功能。

這個(gè)示例假定你正在使用Spring Boot并將相關(guān)的配置信息存儲(chǔ)在application.properties或者application.yml文件中。根據(jù)你的具體項(xiàng)目和方式,你可能需要在不同的配置文件中添加這個(gè)配置,或者使用其他方式來(lái)設(shè)置。

請(qǐng)確保將spring.datasource.url中的mydatabase替換為你實(shí)際的數(shù)據(jù)庫(kù)名,并在spring.datasource.usernamespring.datasource.password中提供正確的數(shù)據(jù)庫(kù)用戶名和密碼。

通過(guò)在配置文件中設(shè)置rewriteBatchedStatements=true,就可以在MyBatis Plus中啟用批量插入的功能,并獲得其帶來(lái)的優(yōu)點(diǎn)。這樣,在執(zhí)行批量插入操作時(shí),MyBatis Plus會(huì)自動(dòng)將多條INSERT語(yǔ)句合并為一條語(yǔ)句執(zhí)行,提高數(shù)據(jù)庫(kù)插入的性能和效率。

請(qǐng)注意,具體的配置方式可能因項(xiàng)目環(huán)境而異,請(qǐng)根據(jù)你的實(shí)際情況進(jìn)行相應(yīng)的配置。

代碼演示

當(dāng)使用MyBatis Plus實(shí)現(xiàn)批量插入時(shí),需要在Mapper層定義批量插入的方法,在Service層調(diào)用該方法,并在ServiceImpl層進(jìn)行具體的業(yè)務(wù)邏輯處理。

下面是一個(gè)完整的示例代碼:

Mapper層

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface UserMapper extends BaseMapper<User> {
    
    void batchInsert(@Param("list") List<User> userList);
}

在上述代碼中,我們定義了一個(gè)UserMapper接口,繼承自BaseMapper。

在該接口中,添加了一個(gè)batchInsert方法,參數(shù)為List<User>類型的userList。

Service層

import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

public interface UserService extends IService<User> {

    void batchInsertUsers(List<User> userList);
}

在上述代碼中,我們定義了一個(gè)UserService接口,繼承自IService。

在該接口中,添加了batchInsertUsers方法,參數(shù)為List<User>類型的userList。

ServiceImpl層

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    @Override
    public void batchInsertUsers(List<User> userList) {
        baseMapper.batchInsert(userList);
    }
}

在上述代碼中,我們創(chuàng)建了一個(gè)UserServiceImpl類,該類繼承了ServiceImpl,同時(shí)實(shí)現(xiàn)了UserService接口。在batchInsertUsers方法中,我們調(diào)用了baseMapper的batchInsert方法來(lái)執(zhí)行批量插入操作。

在此示例中,使用了@Transactional注解來(lái)開(kāi)啟事務(wù),并通過(guò)rollbackFor = Exception.class設(shè)置了異?;貪L策略,確保批量插入操作具有事務(wù)支持。請(qǐng)注意,在ServiceImpl層中,我們注入了UserMapper接口,可以通過(guò)baseMapper來(lái)訪問(wèn)對(duì)應(yīng)的數(shù)據(jù)庫(kù)操作。

測(cè)試方法

當(dāng)需要測(cè)試插入大量數(shù)據(jù)的性能時(shí),你可以添加一個(gè)測(cè)試方法來(lái)插入十萬(wàn)條數(shù)據(jù)并計(jì)算執(zhí)行時(shí)間。

下面是一個(gè)示例的測(cè)試方法:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

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

@SpringBootTest
public class UserBatchInsertTest {
    
    @Autowired
    private UserService userService;

    @Test
    public void testBatchInsertPerformance() {
        // 創(chuàng)建一萬(wàn)條用戶數(shù)據(jù)
        List<User> userList = new ArrayList<>();
        for (int i = 0; i < 100000; i++) {
            User user = new User();
            // 設(shè)置用戶屬性
            user.setName("User" + i);
            // 添加到用戶列表
            userList.add(user);
        }

        long startTime = System.currentTimeMillis();

        // 執(zhí)行批量插入操作
        userService.batchInsertUsers(userList);

        long endTime = System.currentTimeMillis();
        long executionTime = endTime - startTime;
        System.out.println("插入十萬(wàn)條數(shù)據(jù)耗時(shí):" + executionTime + "ms");
    }
}

在上述代碼中,我們創(chuàng)建了一個(gè)UserBatchInsertTest測(cè)試類,并注入UserService接口用于進(jìn)行批量插入操作。

testBatchInsertPerformance測(cè)試方法中,我們首先創(chuàng)建了一萬(wàn)條用戶數(shù)據(jù),在循環(huán)中設(shè)置了用戶屬性,并將其添加到用戶列表中。然后記錄開(kāi)始時(shí)間。

接著調(diào)用userService.batchInsertUsers方法,執(zhí)行批量插入操作。

最后,記錄結(jié)束時(shí)間,計(jì)算執(zhí)行時(shí)間,并將結(jié)果打印出來(lái)。

通過(guò)運(yùn)行此測(cè)試方法,你可以測(cè)試插入十萬(wàn)條數(shù)據(jù)的性能,并獲得插入操作所花費(fèi)的時(shí)間。這樣可以測(cè)試批量插入功能的效率和性能。

請(qǐng)注意,在運(yùn)行大量數(shù)據(jù)插入測(cè)試時(shí),可能會(huì)對(duì)數(shù)據(jù)庫(kù)和系統(tǒng)帶來(lái)一定的負(fù)載,請(qǐng)根據(jù)具體情況進(jìn)行調(diào)整和優(yōu)化。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Springboot集成Mybatis-Flex的示例詳解

    Springboot集成Mybatis-Flex的示例詳解

    Mybatis-Flex 是一個(gè)優(yōu)雅的?Mybatis 增強(qiáng)框架,它非常輕量、同時(shí)擁有極高的性能與靈活性,本文主要介紹了Springboot集成Mybatis-Flex的示例詳解,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • springboot整合JPA過(guò)程解析

    springboot整合JPA過(guò)程解析

    這篇文章主要介紹了springboot整合JPA過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java繼承構(gòu)造器使用過(guò)程解析

    Java繼承構(gòu)造器使用過(guò)程解析

    這篇文章主要介紹了Java繼承構(gòu)造器使用過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Win10 IDEA遠(yuǎn)程連接HBase教程

    Win10 IDEA遠(yuǎn)程連接HBase教程

    在Windows 10上,通過(guò)IDEA連接到虛擬機(jī)中的Hadoop和HBase需要關(guān)閉虛擬機(jī)防火墻,并修改相關(guān)配置文件中的IP地址,此外,創(chuàng)建Maven項(xiàng)目并添加依賴是必要步驟,最后,通過(guò)Java代碼和HBase Shell命令進(jìn)行操作,此過(guò)程涉及的技術(shù)包括虛擬機(jī)配置、防火墻管理、文件編輯和項(xiàng)目管理等
    2024-11-11
  • 詳解Java中布隆過(guò)濾器(Bloom Filter)原理及其使用場(chǎng)景

    詳解Java中布隆過(guò)濾器(Bloom Filter)原理及其使用場(chǎng)景

    布隆過(guò)濾器是1970年由布隆提出的,它實(shí)際上是一個(gè)很長(zhǎng)的二進(jìn)制向量和一系列隨機(jī)映射函數(shù),它的作用是檢索一個(gè)元素是否存在我們的集合之中,本文給大家詳細(xì)的講解一下布隆過(guò)濾器,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • SpringBoot+Shiro學(xué)習(xí)之密碼加密和登錄失敗次數(shù)限制示例

    SpringBoot+Shiro學(xué)習(xí)之密碼加密和登錄失敗次數(shù)限制示例

    本篇文章主要介紹了SpringBoot+Shiro學(xué)習(xí)之密碼加密和登錄失敗次數(shù)限制示例,可以限制登陸次數(shù),有興趣的同學(xué)可以了解一下。
    2017-03-03
  • SpringCloud2020 bootstrap 配置文件失效的解決方法

    SpringCloud2020 bootstrap 配置文件失效的解決方法

    這篇文章主要介紹了SpringCloud2020 bootstrap 配置文件失效的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Java基礎(chǔ)之反射

    Java基礎(chǔ)之反射

    JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;反射是框架設(shè)計(jì)的靈魂,感興趣的小伙伴可以參考閱讀
    2023-03-03
  • Java集合框架迭代器Iterator實(shí)現(xiàn)原理解析

    Java集合框架迭代器Iterator實(shí)現(xiàn)原理解析

    這篇文章主要介紹了Java集合框架迭代器Iterator實(shí)現(xiàn)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Spring Boot 整合 Druid 并開(kāi)啟監(jiān)控的操作方法

    Spring Boot 整合 Druid 并開(kāi)啟監(jiān)控的操作方法

    本文介紹了如何在SpringBoot項(xiàng)目中引入和配置Druid數(shù)據(jù)庫(kù)連接池,并開(kāi)啟其監(jiān)控功能,通過(guò)添加依賴、配置數(shù)據(jù)源、開(kāi)啟監(jiān)控、自定義配置以及訪問(wèn)監(jiān)控頁(yè)面,開(kāi)發(fā)者可以有效提高數(shù)據(jù)庫(kù)訪問(wèn)效率并監(jiān)控連接池狀態(tài),感興趣的朋友跟隨小編一起看看吧
    2025-01-01

最新評(píng)論