Mybatis PlusIService 接口中提供了批量插入的方法,然而,它的内部实现逻辑竟然是这样的:

居然是循环单条插入?!逗人玩嘛,好吧,自己动手,丰衣足食。

一. 添加依赖

<!--mybatis plus extension,包含了mybatis plus core-->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-extension</artifactId><version>3.4.0</version>
</dependency>

二. 继承默认方法注入

在 injector 包下新建 EasySqlInjector.java

EasySqlInjector.java

import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
import java.util.List;/*** @author: jichunyang* @description: 自定义数据方法注入* @date: 2020/12/18 14:15**/
public class EasySqlInjector extends DefaultSqlInjector {@Overridepublic List<AbstractMethod> getMethodList(Class<?> mapperClass) {List<AbstractMethod> methodList = super.getMethodList(mapperClass);methodList.add(new InsertBatchSomeColumn());return methodList;}
}

三. 在 MybatisPlusConfig 配置文件中注入 Bean

//开启事务
@EnableTransactionManagement
@Configuration
@MapperScan("扫描的mapper包路径")
public class MybatisPlusConfig {//需要注入的Bean@Beanpublic EasySqlInjector easySqlInjector() {return new EasySqlInjector();}@Bean("sqlSessionFactory")public SqlSessionFactory sqlSessionFactory() throws Exception {MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();// 其他配置项......sqlSessionFactory.setGlobalConfig(globalConfiguration());return sqlSessionFactory.getObject();}@Beanpublic GlobalConfig globalConfiguration() {GlobalConfig conf = new GlobalConfig();// 自定义的注入需要在这里进行配置conf.setSqlInjector(easySqlInjector());return conf;}
}

四. 扩展自带 BaseMapper

在 mapper 包下新建 EasyBaseMapper 接口,扩展自带 BaseMapper

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;public interface EasyBaseMapper<T> extends BaseMapper<T> {/*** 批量插入 仅适用于mysql* @param entityList 实体列表* @return 影响行数*/Integer insertBatchSomeColumn(List<T> entityList);
}

五. 业务层面实现

修改业务 mapper 接口 UserMapper,继承刚刚扩展的 EasyBaseMapper

import org.apache.ibatis.annotations.Mapper;/*** @author jichunyang* @description 用户Mapper*/
@Mapper
public interface UserMapper extends EasyBaseMapper<User> {}

service实现层的使用

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {@Override@Transactionalpublic void insertUsers(List<User> users) {// 这里使用了自定义的批量插入,baseMapper可以直接使用,不需要声明baseMapper.insertBatchSomeColumn(users);}
}

IUserService 是定义的业务逻辑接口,和批量插入配置无关;

参考博客:https://www.cnblogs.com/thinkYi/p/13723035.html

Mybatis Plus关联博客:

SpringBoot + Mybatis Plus + Druid 实现多数据源切换和动态事务

MyBatis Plus 的自动填充数据功能

Mybatis Plus 实现批量插入相关推荐

  1. Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案

    Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案 参考文章: (1)Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案 (2)https://www.cnblogs. ...

  2. Java mybatis实现mysql批量插入

    记录下来方便自己,同时也希望能对比较迷惑的小盆友有所帮助 1.把批量插入的数据生成一个List集合 2.用java控制一次插入的条数和集合 // 每次插入10条int len = count, inc ...

  3. 16、mybatis动态sql 批量插入

    文章目录 1.EmployeeMapper 2.EmployeeMapper.xml(以逗号间隔执行一条语句)(推荐) 3.Test 4.以分号间隔执行每条语句(第二种方式) 5.Oracle下的批量 ...

  4. MyBatis foreach语句批量插入数据

    本例技术:Spring+SpringMVC+MyBatis+Oracle 问题描述:需要将程序里的一个集合保存到数据库里,集合的类型对应数据库的一个实体,若在程序里遍历集合再一条条保存到数据库表中有点 ...

  5. 转:Mybatis与JDBC批量插入数据库哪个更快

    转自 http://www.cnblogs.com/fnz0/p/5713102.html, https://www.cnblogs.com/wxw7blog/p/8706797.html [转]: ...

  6. Mybatis 批量操作(批量插入、批量更新、批量删除)总结

    文章目录 一.批量插入 二.批量更新 三.批量删除 一.批量插入 <insert id="insertBatch" parameterType="java.util ...

  7. mybatis以及mybatisplus批量插入问题

    1. 思路分析: 批量插入是我们日常开放经常会使用到的场景,一般情况下我们也会有两种方案进行实施,如下所示. 方案一 就是用 for 循环循环插入: 优点:JDBC 中的 PreparedStatem ...

  8. mybatis逆向工程和批量插入

    逆向工程 导包 <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>my ...

  9. MyBatis 使用 foreach 批量插入

    yml文件 spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ ...

最新文章

  1. python基础教程:包的创建及导入
  2. ubuntu启动时自动挂载windows分区
  3. MySQL基础学习过程
  4. js/jquery学习笔记
  5. mysql数据库崩溃恢复_MySQL数据库表维护和崩溃恢复
  6. Python爬虫入门一综述
  7. SAP License:从前台接待看企业文化
  8. Qt环境下调用捷宇高拍仪OCX
  9. 领导给你安排任务,这三种话,越早说越好
  10. 强者的系统:高观点下的人生
  11. PHP+实验室安全系统 毕业设计 -附源码191610
  12. java-net-php-python-springbot学生奖惩管理系统计算机毕业设计程序
  13. 全球与中国椎弓根螺钉固定市场深度研究分析报告
  14. KDA,token.Kadena链的一些常识
  15. 华为荣耀系列移动终端产品分析和演进研究
  16. 六、MySQL之数据定义语言(一)
  17. 免疫的特异性和非特异性
  18. mysql同时查两张表数据库表_sql语句 同时查询两个表
  19. 成为一个程序员要花多长时间
  20. 【儿童节】2018 下半年 Java 后端工程师的书单推荐

热门文章

  1. EasyExcel自定义表头
  2. 关于按键精灵url的post方法返回值为空
  3. 冠词,a/an/the --- 元音字母
  4. tiktok英国小店注册流程介绍
  5. Android调用getSimSerialNumber获取iccid不完整(RK3288 7.1.2)
  6. RNA编辑基本形式与相关技术的研究现状(阅读小结)
  7. CANopen协议中文文档
  8. ubuntu20.04双系统启动盘制作、安装和卸载
  9. 查找算法之斐波那契查找算法
  10. 优动漫PAINT中误删工具怎么办?