国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

mybatis-plus 批量插入示例

這篇具有很好參考價(jià)值的文章主要介紹了mybatis-plus 批量插入示例。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

正常我們使用mybatis-plus插入的時(shí)候,首先想到的是??saveBatch?方法,不過看了下打印出來的sql和底層代碼,才發(fā)現(xiàn)它并不是真正的批量插入。

IService 中的代碼為
    default boolean saveBatch(Collection<T> entityList) {
        return this.saveBatch(entityList, 1000);
    }

? ? 實(shí)現(xiàn)層? ?ServiceImpl?中的代碼為

    public boolean saveBatch(Collection<T> entityList, int batchSize) {
        String sqlStatement = this.getSqlStatement(SqlMethod.INSERT_ONE);
        return this.executeBatch(entityList, batchSize, (sqlSession, entity) -> {
            sqlSession.insert(sqlStatement, entity);
        });
    }
SqlMethod.INSERT_ONE 的中文枚舉為  
INSERT_ONE("insert", "插入一條數(shù)據(jù)(選擇字段插入)", "<script>\nINSERT INTO %s %s VALUES %s\n</script>"),

通過監(jiān)控控制臺發(fā)現(xiàn),它只是循環(huán)每1000條去插入,效率非常低。

?

參考網(wǎng)友的文章,找到一個(gè)支持批量操作的方法,下面直接貼上代碼

1、添加批量操作參數(shù)類??CustomSqlInjector

/**
 * 支持自定義SQL注入方法
 */
public class CustomSqlInjector extends DefaultSqlInjector {
    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
        // 獲取父類SQL注入方法列表
        List<AbstractMethod> methodList = super.getMethodList(mapperClass);
        // 將批量插入方法添加進(jìn)去
        methodList.add(new InsertBatchSomeColumn());
        return methodList;
    }
}

2、在MybatisPlusConfig中配置?

@Bean
public CustomSqlInjector customSqlInjector() {
     return new CustomSqlInjector();
}

3、添加自定義 Mapper接口?

/**
 * 自定義Mapper,添加批量插入接口
 * @param <T>
 */
@Mapper
public interface CustomMapper<T> extends BaseMapper<T> {
    /**
     * 批量插入
     * @param entityList 實(shí)體列表
     * @return 影響行數(shù)
     */
    Integer insertBatchSomeColumn(Collection<T> entityList);
}

4、將原來的Mapper業(yè)務(wù)接口,換成繼承此接口

@Mapper
public interface StudentDao extends CustomMapper<Student> {
    List<Student> query(Student student);
}

5、再進(jìn)行測試一下

    @Transactional  //事務(wù)注解要加上
    @Override
    public void testBatchCreate() {
        List<Student> list = new ArrayList<>();
        int startIndex = this.lambdaQuery().select(Student::getId).count();
        for (int i = 1; i <= 1000000; i++) {
            Student student = new Student();
            Long id = SnowFlake.nextId();
            student.setId(id);
            student.setCode("studentCode-" + (startIndex + i));
            student.setName("studentName-" + (startIndex + i));
            list.add(student);
        }
        Long startTime = System.currentTimeMillis();
        System.out.println("開始批量操作:" + startTime);
        int count = this.baseMapper.insertBatchSomeColumn(list);
        Long endTime = System.currentTimeMillis();
        System.out.println("完成批量操作:" + endTime);
        System.out.println("用時(shí):" + (endTime - startTime));
        System.out.println("保存成功:" + count);
        //this.saveBatch(list);
    }

測試結(jié)果為,1000000條數(shù)據(jù),用時(shí)大概在 35秒左右

mybatis-plus 批量插入示例

?注意事項(xiàng):

1、mysql會提示超過? max_allowed_packet? 設(shè)置的最大值,到? my.cnf文件(windows為my.ini)修改就行了,我這直接改成? 200M

2、此處為示例,實(shí)際業(yè)務(wù)中循環(huán)不要放在事務(wù)里面文章來源地址http://www.zghlxwxcb.cn/news/detail-615022.html

?

到了這里,關(guān)于mybatis-plus 批量插入示例的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • No Spring環(huán)境Mybatis-Plus批量插入并返回主鍵的兩種方式

    No Spring環(huán)境Mybatis-Plus批量插入并返回主鍵的兩種方式

    批量插入,可以把Mybatis-Plus看作是Mybatis加強(qiáng)版;故Mybatis中的相關(guān)操作都可以在Mybatis-Plus中使用;在mysql數(shù)據(jù)庫中支持批量插入,所以只要配置useGeneratedKeys和keyProperty就可以批量插入并返回主鍵了。 下面是批量插入的Dao層接口 ? ?一注解方式: ? ? ?直接擼代碼: ? ? ?第二種: XML方

    2024年02月09日
    瀏覽(28)
  • Mybatis-plus批量操作

    ? ? ? ? 使用Mybatis-plus可以很方便的實(shí)現(xiàn)批量新增和批量修改,不僅比自己寫foreach遍歷方便很多,而且性能也更加優(yōu)秀。但是Mybatis-plus官方提供的批量修改和批量新增都是根據(jù)id來修改的,有時(shí)候我們需求其他字段,所以就需要我們自己修改一下。 ? ? ? ? 在Mybatis-plus的IS

    2024年02月11日
    瀏覽(19)
  • Mybatis-Plus批量更新原理

    Mybatis-Plus批量更新原理

    IService的updateBatchById方法 默認(rèn)batchSize = 1000 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl#updateBatchById 構(gòu)建了一個(gè)回調(diào),進(jìn)入executeBatch方法 在這個(gè)方法基本就能看出來了,執(zhí)行1000次方法后執(zhí)行一次flushStatements,也就是說理論上是積累了1000個(gè)更新sql,才進(jìn)行一次數(shù)據(jù)庫更新 使用

    2024年02月05日
    瀏覽(20)
  • mybatis-plus的批量新增insertBatchSomeColumn

    mybatis-plus的批量新增insertBatchSomeColumn

    MyBatis-Plus 是基于 MyBatis 進(jìn)行封裝的一套優(yōu)秀的持久層框架,它提供了豐富的便捷操作方法和強(qiáng)大的代碼生成器,大大簡化了 MyBatis 的使用。在 MyBatis-Plus 中,我們可以使用 insertBatchSomeColumn 方法來實(shí)現(xiàn)批量新增指定字段的操作。 mybatis-plus 的? IService 接口? 默認(rèn)提供 ? saveBat

    2024年02月01日
    瀏覽(17)
  • mybatis-plus批量保存異常及效率優(yōu)化

    mybatis-plus批量保存異常及效率優(yōu)化

    最近基于自己公司內(nèi)部服務(wù)維護(hù),發(fā)現(xiàn)其中調(diào)度中心近期出現(xiàn)不少錯(cuò)誤日志,但是該任務(wù)卻是正常執(zhí)行,生成的報(bào)表數(shù)據(jù)也是正常的,所以很多天沒有發(fā)現(xiàn)問題 這就匪夷所思了, ? ?經(jīng)仔細(xì)排查發(fā)現(xiàn),是觸發(fā)了feign超時(shí)hystrix熔斷器機(jī)制 也就是說子服務(wù)出現(xiàn)了執(zhí)行時(shí)間過長的

    2024年01月16日
    瀏覽(22)
  • mybatis-plus 根據(jù)指定字段 批量 刪除/修改

    mybatis-plus 根據(jù)指定字段 批量 刪除/修改

    mybatis-plus 提供了根據(jù)id批量更新和修改的方法,這個(gè)大家都不陌生 但是當(dāng)表沒有id的時(shí)候怎么辦) 這個(gè)就不說了,就是因?yàn)椴幌胧謱慡QL 所以才有這篇博客 mybatis plus 的 executeBatch 參考 mybatis plus 的updateBatchById 方法. 調(diào)用處: 接口 重寫方法 實(shí)現(xiàn) 這種寫法其實(shí)批量的效率還是比較慢的

    2024年02月13日
    瀏覽(17)
  • Mybatis-plus通過其他字段批量更新或新增

    根據(jù)某個(gè)或者多個(gè)非ID字段進(jìn)行批量更新 示例通過名稱與id兩個(gè)字段更新 引用mybatis-plus根據(jù)某個(gè)指定字段批量更新數(shù)據(jù)庫 通過其他字段批量更新或新增

    2024年02月12日
    瀏覽(19)
  • Mybatis-Plus 自定義mapper批量新增修改函數(shù)

    version MybatisPlusConfig CustomizedSqlInjector InsertBatchMethod UpdateBatchMethod RootMapper 使用方式 mapper接口實(shí)現(xiàn)自定義的RootMapper,即可調(diào)用批量新增修改函數(shù)

    2024年02月12日
    瀏覽(31)
  • spring boot集成mybatis-plus——Mybatis Plus 批量 Insert_新增數(shù)據(jù)(圖文講解)

    spring boot集成mybatis-plus——Mybatis Plus 批量 Insert_新增數(shù)據(jù)(圖文講解)

    ?更新時(shí)間 2023-01-10 16:02:58 大家好,我是小哈。 本小節(jié)中,我們將學(xué)習(xí)如何通過 Mybatis Plus 實(shí)現(xiàn) MySQL 批量插入數(shù)據(jù)。 先拋出一個(gè)問題:假設(shè)老板給你下了個(gè)任務(wù),向數(shù)據(jù)庫中添加 100 萬條數(shù)據(jù),并且不能耗時(shí)太久! 通常來說,我們向 MySQL 中新增一條記錄,SQL 語句類似如下:

    2024年02月04日
    瀏覽(28)
  • Mybatis-Plus批量添加或修改數(shù)據(jù)的三種方式

    Mybatis-Plus批量添加或修改數(shù)據(jù)的三種方式

    提供的方法 是遍歷每一個(gè)元素,判斷主鍵是否存在,如果存在則做更新,不存在添加 先獲取表中所有的主鍵 ,然后 判斷是否已存在,存在更新,不存在添加 on duplicate key update 是Mysql特有的語法,如下圖所示,表中id 為主鍵 再插入id為1的數(shù)據(jù),則提示主鍵已存在 改成如下

    2024年02月06日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包