码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Mybatis plus无介绍快使用,MybatisPlus3.5版本设置批量插入附源码(十一)


    Mybatis plus无介绍快使用,MybatisPlus3.5版本设置批量插入附源码(十一)

    • 问题背景
        • Mybatis-plus无介绍快使用,CRUD增删改查基本使用附源码(一)
        • Mybatis-plus无介绍快使用,自定义sql语句CRUD增删改查附源码(二)
        • Mybatis-plus无介绍快使用,自带封装service层的使用附源码(三)
        • Mybatis-plus无介绍快使用,注解的使用(四)
        • Mybatis-plus无介绍快使用,Wrapper条件构造器的使用附源码(五)
        • Mybatis-plus无介绍快使用,分页插件和乐观锁插件的使用附源码(六)
        • Mybatis-plus无介绍快使用,枚举变量的使用附源码(七)
        • Mybatis-plus无介绍快使用,多数据源的使用(八)
        • Mybatis-plus无介绍快使用,MybatisX自动生成代码插件的使用(九)
        • Mybatis-plus无介绍快使用,可继承通用的基础实体类(十)
    • MybatisPlus批量插入
    • 总结
    • Lyric: 放晴 等雨说放弃

    问题背景

    项目中,尽量使用批量插入,减少数据库磁盘IO的操作,提高效率
    注意事项:

    • 官方网站:https://baomidou.com/
    • 官方文档:https://baomidou.com/pages/24112f/
    • 可以自己创建工程,也可以下载源码进行参考
    • MyBatis-Plus在实现插入数据时,会默认基于雪花算法的策略生成id,实体类entity属性都使用对象,使用Long,不能使用long,不然雪花算法会失效

    Mybatis-plus无介绍快使用,CRUD增删改查基本使用附源码(一)

    Mybatis-plus无介绍快使用,自定义sql语句CRUD增删改查附源码(二)

    Mybatis-plus无介绍快使用,自带封装service层的使用附源码(三)

    Mybatis-plus无介绍快使用,注解的使用(四)

    Mybatis-plus无介绍快使用,Wrapper条件构造器的使用附源码(五)

    Mybatis-plus无介绍快使用,分页插件和乐观锁插件的使用附源码(六)

    Mybatis-plus无介绍快使用,枚举变量的使用附源码(七)

    Mybatis-plus无介绍快使用,多数据源的使用(八)

    Mybatis-plus无介绍快使用,MybatisX自动生成代码插件的使用(九)

    Mybatis-plus无介绍快使用,可继承通用的基础实体类(十)

    MybatisPlus批量插入

    1 MybatisPlus3.5版本和3.3版本有些许不同,3.3版本会少一个tableInfo参数,创建EasySqlInjector类

    package com.lanran.transactional.config;
    
    import com.baomidou.mybatisplus.core.injector.AbstractMethod;
    import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
    import com.baomidou.mybatisplus.core.metadata.TableInfo;
    import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
    
    import java.util.List;
    
    /**
     * @Author suolong
     * @Date 2022/7/21 9:59
     * @Version 2.0
     */
    
    
    public class EasySqlInjector extends DefaultSqlInjector {
    
        @Override
        public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
            // TODO Auto-generated method stub
            List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo);
            methodList.add(new InsertBatchSomeColumn()); // 添加InsertBatchSomeColumn方法
            return methodList;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    2 添加mybatisplus配置类

    package com.lanran.transactional.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    
    /**
     * @Author suolong
     * @Date 2022/7/21 9:57
     * @Version 2.0
     */
    @Configuration
    public class MybatisPlusConfig {
    
            @Bean
            public EasySqlInjector easySqlInjector () {
                return new EasySqlInjector();
            }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    3 启动类,一定要添加MapperScan

    package com.lanran.transactional;
    
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @MapperScan("com.lanran.transactional.dao")
    @SpringBootApplication
    public class TransactionalApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(TransactionalApplication.class, args);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    4 mapper、xml、entity都是使用mybatisplus生成的,测试类如下

    package com.lanran.transactional;
    
    import com.lanran.transactional.dao.JpaTestMapper;
    import com.lanran.transactional.dao.PaymentMapper;
    import com.lanran.transactional.entity.Payment;
    import com.lanran.transactional.service.PaymentService;
    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
    class TransactionalApplicationTests {
    
        @Test
        void contextLoads() {
        }
    
        @Autowired
        PaymentMapper paymentMapper;
    
    
        @Test
        public void batchInsertTest(){
            List<Payment> payments = new ArrayList<>();
            for (int i = 0; i < 5; i++) {
                Payment p = new Payment();
                p.setSerial(String.valueOf(i));
                payments.add(p);
            }
            Integer integer = paymentMapper.insertBatchSomeColumn(payments);
            System.out.println(integer);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    5 application配置文件

    spring:
      datasource:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/mysqltest?characterEncoding=utf-8&useSSL=false
        username: root
        password: 123456
      sql:
        init:
          encoding: utf-8
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    6 测试结果,一共批量插入了5条数据

    7 整体项目目录

    总结

    自己也可以在xml中写sql语句,只是表太多有点麻烦




    作为程序员第 213 篇文章,每次写一句歌词记录一下,看看人生有几首歌的时间,wahahaha …

    Lyric: 放晴 等雨说放弃

  • 相关阅读:
    Qt应用开发(基础篇)——组合框容器 QGroupBox
    ArcGIS Pro脚本工具(6)——修复CAD图层数据源
    精准用户画像!商城用户分群2.0!
    面试面经|Java面试基础题17道
    【JVM基础篇】类加载器分类介绍
    web课程设计使用html+css+javascript+jquery技术制作个人介绍6页
    此文带你详细了解MySQL数据库的存储引擎知识
    利用现有数据库管理系统创建一个安全的分布式数据库集群
    ​​Python少儿编程小课堂(二)入门篇2
    10.16 校招 实习 内推 面经
  • 原文地址:https://blog.csdn.net/cucgyfjklx/article/details/125910319
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号