最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

優(yōu)化MyBatis-Plus批量插入策略方式

 更新時間:2026年01月14日 09:35:18   作者:快來卷java  
文章介紹了MyBatis-Plus的saveBatch方法雖然方便,但效率較低,提出了InsertBatchSomeColumn插件,可以在批量插入數(shù)據(jù)時只插入部分需要的列,從而提高效率,通過配置和代碼示例,展示了如何在項目中使用該插件進行批量插入操作

一、用Mybatis-plus中的saveBatch方法

MyBatis-Plus 的 Service 層提供了 saveBatch 方法,可以方便地實現(xiàn)批量插入操作。但查閱源碼發(fā)現(xiàn),saveBatch的底層還是逐條插入的,這就會導(dǎo)致當數(shù)據(jù)量大的時候程序運行效率變慢

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;

// 假設(shè)實體類為 User
class User {
    private Long id;
    private String name;

    // 構(gòu)造函數(shù)、getter 和 setter 方法
    public User() {}

    public User(Long id, String name) {
        this.id = id;
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

// 假設(shè) UserMapper 繼承自 BaseMapper
interface UserMapper extends com.baomidou.mybatisplus.core.mapper.BaseMapper<User> {}

// UserService 繼承自 ServiceImpl
@Service
class UserService extends ServiceImpl<UserMapper, User> {
    public boolean saveUserBatch(List<User> userList) {
        return this.saveBatch(userList);
    }
}

// 調(diào)用示例
public class Main {
    public static void main(String[] args) {
        UserService userService = new UserService();
        java.util.List<User> userList = new java.util.ArrayList<>();
        userList.add(new User(1L, "Alice"));
        userList.add(new User(2L, "Bob"));

        boolean result = userService.saveUserBatch(userList);
        if (result) {
            System.out.println("批量插入成功");
        } else {
            System.out.println("批量插入失敗");
        }
    }
}

二、InsertBatchSomeColumn插件

它繼承了Abstractmethod類,在 MyBatis-Plus 中,InsertBatchSomeColumn 是一種用于批量插入部分列數(shù)據(jù)的插入策略,它可以幫助我們在批量插入數(shù)據(jù)時只插入部分需要的列,而不是插入所有列。

1.使用前配置

首先,確保你的項目中已經(jīng)添加了 MyBatis-Plus 和 MySQL 驅(qū)動的依賴。

如果你使用的是 Maven 項目,可以在 pom.xml 中添加以下依賴:

<dependencies>
    <!-- MyBatis-Plus -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.3.1</version>
    </dependency>
    <!-- MySQL 驅(qū)動 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.32</version>
    </dependency>
</dependencies>

2.代碼示例

1.配置類MybatisPlusConfig

  • 創(chuàng)建一個自定義的 DefaultSqlInjector,并在 getMethodList 方法中添加 InsertBatchSomeColumn 方法,將其注入到 MyBatis-Plus 中。
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.List;

@Configuration
public class MybatisPlusConfig {
    @Bean
    public DefaultSqlInjector sqlInjector() {
        return new DefaultSqlInjector() {
            @Override
            public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
                List<AbstractMethod> methodList = super.getMethodList(mapperClass);
                methodList.add(new InsertBatchSomeColumn());
                return methodList;
            }
        };
    }
}    

2.實體類 User

使用 @TableName 注解指定該實體類對應(yīng)的數(shù)據(jù)庫表名。

為每個屬性提供了對應(yīng)的 getter 和 setter 方法,這里使用了 Lombok 的 @Data 注解來自動生成這些方法

ximport com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("user")
public class User {
    private Long id;
    private String name;
    @TableField("age")
    private Integer age;
    private String email;
}    

3.Mapper 接口 UserMapper

繼承自 BaseMapper,繼承了 MyBatis-Plus 提供的基本 CRUD 方法。

使用 @InsertProvider 注解指定插入方法的 SQL 提供者為 InsertBatchSomeColumn,并調(diào)用其 sql 方法生成 SQL 語句。

定義了 insertBatchSomeColumn 方法,用于批量插入部分列數(shù)據(jù)。

import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
import com.baomidou.mybatisplus.extension.plugins.inner.SqlParserInner;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.builder.annotation.ProviderMethodResolver;

import java.util.List;

public interface UserMapper extends BaseMapper<User>, ProviderMethodResolver {
    @InsertProvider(type = InsertBatchSomeColumn.class, method = "sql")
    int insertBatchSomeColumn(@Param("list") List<User> list);
}    


4.測試類 InsertBatchTest

實現(xiàn) CommandLineRunner 接口,在 run 方法中進行測試。 

創(chuàng)建多個 User 對象并添加到列表中。

調(diào)用 UserMapper 的 insertBatchSomeColumn 方法進行批量插入,并打印插入的行數(shù)。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

@SpringBootApplication
public class InsertBatchTest implements CommandLineRunner {

    @Autowired
    private UserMapper userMapper;

    public static void main(String[] args) {
        SpringApplication.run(InsertBatchTest.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        List<User> userList = new ArrayList<>();
        User user1 = new User();
        user1.setName("Alice");
        user1.setAge(20);
        userList.add(user1);

        User user2 = new User();
        user2.setName("Bob");
        user2.setAge(22);
        userList.add(user2);

        int rows = userMapper.insertBatchSomeColumn(userList);
        System.out.println("插入行數(shù): " + rows);
    }
}    
    user2.setName("Bob");
    user2.setAge(22);
    userList.add(user2);

    int rows = userMapper.insertBatchSomeColumn(userList);
    System.out.println("插入行數(shù): " + rows);
}

總結(jié)

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

相關(guān)文章

  • Mybatis-Plus開發(fā)提速器generator的使用

    Mybatis-Plus開發(fā)提速器generator的使用

    本文就介紹這款基于Mybatis-Plus的代碼自助生成器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • idea插件開發(fā)之彈出框的示例代碼

    idea插件開發(fā)之彈出框的示例代碼

    這篇文章主要介紹了idea插件開發(fā)之彈出框的示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Java?IO異常如何處理詳析

    Java?IO異常如何處理詳析

    異常就是Java程序在運行過程中出現(xiàn)的錯誤,下面這篇文章主要給大家介紹了關(guān)于Java?IO異常如何處理的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • Java語言打印九九乘法表

    Java語言打印九九乘法表

    這篇文章主要為大家詳細介紹了Java語言打印九九乘法表的相關(guān)代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Spring Boot Controller處理HTTP請求體的方法

    Spring Boot Controller處理HTTP請求體的方法

    Spring Boot提供了強大的機制來處理不同 Content-Type? 的HTTP請求體,這主要依賴于 HttpMessageConverter? 接口的各種實現(xiàn),它們能夠自動將請求體內(nèi)容轉(zhuǎn)換成Java方法參數(shù),本文給大家介紹Spring Boot Controller處理HTTP請求體的方法,感興趣的朋友一起看看吧
    2025-05-05
  • java快速排序和選擇排序?qū)崿F(xiàn)實例解析

    java快速排序和選擇排序?qū)崿F(xiàn)實例解析

    這篇文章主要為大家介紹了java快速排序和選擇排序?qū)崿F(xiàn)實例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Java ThreadLocal的使用場景總結(jié)

    Java ThreadLocal的使用場景總結(jié)

    ThreadLocal原本設(shè)計是為了解決并發(fā)時,線程共享變量的問題,但由于過度設(shè)計,從而導(dǎo)致它的理解難度大和使用成本高等問題。即便如此,ThreadLocal依舊有適合自己的使用場景,比如本文要介紹了這兩種使用場景,除了ThreadLocal之外,還真沒有合適的替代方案。
    2021-05-05
  • 詳解Java兩種方式簡單實現(xiàn):爬取網(wǎng)頁并且保存

    詳解Java兩種方式簡單實現(xiàn):爬取網(wǎng)頁并且保存

    本篇文章主要介紹了Java兩種方式簡單實現(xiàn):爬取網(wǎng)頁并且保存 ,主要用UrlConnection、HttpClient爬取實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-12-12
  • 關(guān)于服務(wù)網(wǎng)關(guān)Spring Cloud Zuul(Finchley版本)

    關(guān)于服務(wù)網(wǎng)關(guān)Spring Cloud Zuul(Finchley版本)

    這篇文章主要介紹了關(guān)于服務(wù)網(wǎng)關(guān)Spring Cloud Zuul(Finchley版本),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • spring?IOC的理解之原理和實現(xiàn)過程

    spring?IOC的理解之原理和實現(xiàn)過程

    這篇文章主要介紹了spring?IOC的理解之原理和實現(xiàn)過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05

最新評論

穆棱市| 镇巴县| 筠连县| 刚察县| 南安市| 营山县| 常山县| 静乐县| 玉田县| 精河县| 青海省| 体育| 前郭尔| 河西区| 靖江市| 屯昌县| 西乌珠穆沁旗| 梁河县| 佛坪县| 彰武县| 长宁区| 偃师市| 阜新市| 天门市| 八宿县| 邳州市| 平利县| 南阳市| 万宁市| 凤庆县| 林西县| 呼和浩特市| 正宁县| 五大连池市| 兴海县| 玛沁县| 呼图壁县| 长汀县| 蓬莱市| 会泽县| 博乐市|