Mybatis Plus 实现批量插入的示例代码

目录
  • 一. 添加依赖
  • 二. 继承默认方法注入
  • 三. 在 MybatisPlusConfig 配置文件中注入 Bean
  • 四. 扩展自带 BaseMapper
  • 五. 业务层面实现

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 {

    @Override
    public 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
	@Bean
    public EasySqlInjector easySqlInjector() {
        return new EasySqlInjector();
    }

	@Bean("sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
        // 其他配置项
        ......
        sqlSessionFactory.setGlobalConfig(globalConfiguration());
        return sqlSessionFactory.getObject();
    }

    @Bean
    public 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
    @Transactional
    public void insertUsers(List<User> users) {
	    // 这里使用了自定义的批量插入,baseMapper可以直接使用,不需要声明
	    baseMapper.insertBatchSomeColumn(users);
	}
}

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

参考博客:https://www.jb51.net/article/196445.htm

到此这篇关于Mybatis Plus 实现批量插入的示例代码的文章就介绍到这了,更多相关Mybatis Plus批量插入内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 给你的MyBatis-Plus装上批量插入的翅膀(推荐)

    前言 各位好,我是易哥(thinkYi). 大家有用过MyBatis-Plus(简称MP)的都知道它是一个MyBatis的增强工具,旨在MyBatis的基础上只做增强不做改变,为简化开发.提高效率而生. 特点 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作 强大的 CRUD 操作:内置通用 Mapper.通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足

  • Mybatis Plus 实现批量插入的示例代码

    目录 一. 添加依赖 二. 继承默认方法注入 三. 在 MybatisPlusConfig 配置文件中注入 Bean 四. 扩展自带 BaseMapper 五. 业务层面实现 Mybatis Plus 的 IService 接口中提供了批量插入的方法,然而,它的内部实现逻辑竟然是这样的: 居然是循环单条插入?!逗人玩嘛,好吧,自己动手,丰衣足食. 一. 添加依赖 <!--mybatis plus extension,包含了mybatis plus core--> <dependency&

  • spring中使用mybatis实现批量插入的示例代码

    有3种实现方式:foreach,spring事务,以及ExecutorType.BATCH. 1. foreach方式 这种方式实际是对SQL语句进行拼接,生成一个长长的SQL,对很多变量进行绑定.如果数据量不大(1000个以内),可以用这种方式.如果数据量太大,可能数据库会报错. 定义接口 public interface StudentMapper05 { public void insertStudent(List<Student> studentList); } 定义mapper 适用

  • Mybatis传入List实现批量更新的示例代码

    Dao层写法 /** * 批量更新新库存 * @param list * @return */ int updateNewStock(@Param(value = "list") List<GreenBeanMsg> list); xml具体实现代码 <update id="updateNewStock" parameterType="java.util.List"> <foreach collection=&quo

  • springboot整合Mybatis、JPA、Redis的示例代码

    引言 在springboot 项目中,我们是用ORM 框架来操作数据库变的非常方便.下面我们分别整合mysql ,spring data jpa 以及redis .让我们感受下快车道. 我们首先创建一个springboot 项目,创建好之后,我们来一步步的实践. 使用mybatis 引入依赖: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-

  • SpringBoot+MyBatis+AOP实现读写分离的示例代码

    目录 一. MySQL 读写分离 1.1.如何实现 MySQL 的读写分离? 1.2.MySQL 主从复制原理? 1.3.MySQL 主从同步延时问题(精华) 二.SpringBoot+AOP+MyBatis实现MySQL读写分离 2.1.AbstractRoutingDataSource 2.2.如何切换数据源 2.3.如何选择数据源 三 .代码实现 3.0.工程目录结构 3.1.引入Maven依赖 3.2.编写配置文件,配置主从数据源 3.3.Enum类,定义主库从库 3.4.ThreadL

  • 强烈推荐MyBatis 三种批量插入方式的比较

    目录 前言 代码 拼接SQL的xml Service类 测试类 测试结果 结论 前言 数据库使用的是SQLServer,JDK版本1.8,运行在SpringBoot环境下 对比3种可用的方式: 反复执行单条插入语句 xml拼接sql 批处理执行 先说结论:少量插入请使用反复插入单条数据,方便.数量较多请使用批处理方式.(可以考虑以有需求的插入数据量20条左右为界吧,在我的测试和数据库环境下耗时都是百毫秒级的,方便最重要) 无论何时都不用xml拼接sql的方式. 代码 拼接SQL的xml newI

  • Python实现邮件的批量发送的示例代码

    1 发送文本信息 '''加密发送文本邮件''' def sendEmail(from_addr,password,to_addr,smtp_server): try: msg = MIMEText('你好,来自信息化工程所的问候...', 'plain', 'utf-8') # 文本邮件 # msg = MIMEText('<html><body><h1>你好</h1>' + '<p>send by <a href="http:/

  • mysql 循环批量插入的实例代码详解

    背景 前几天在MySql上做分页时,看到有博文说使用 limit 0,10 方式分页会有丢数据问题,有人又说不会,于是想自己测试一下.测试时没有数据,便安装了一个MySql,建了张表,在建了个while循环批量插入10W条测试数据的时候,执行时间之长无法忍受,便查资料找批量插入优化方法,这里做个笔记. 数据结构 寻思着分页时标准列分主键列.索引列.普通列3种场景,所以,测试表需要包含这3种场景,建表语法如下: drop table if exists `test`.`t_model`; Crea

  • Python3 实现文件批量重命名示例代码

    在Python中os模块里,os.renames() 方法用于递归重命名目录或文件.类似rename(). rename()方法语法格式如下: os.rename(old,new) old是需要修改的目录/文件名,new是修改后的目录/文件名,通过这个方法我们可以很轻松的完成批量在文件/目录增加固定前缀或者批量删除文件/目录固定前缀 . 以下代码Windows下和Linux都可以使用. 示例如下: 增加前缀'[Linuxidc.]': import os path='/home/linuxidc

  • Python用5行代码实现批量抠图的示例代码

    前言 对于会PhotoShop的人来说,抠图是非常简单的操作了,有时候几秒钟就能扣好一张图.不过一些比较复杂的图,有时候还是要画点时间的,今天就给大家带了一个非常快速简单的办法,用Python来批量抠取人像. 效果展示 开始吧,我也不看好什么自动抠图,总觉得不够精确,抠不出满意的图.下面我就直接展示一下效果图吧.我们先看看原图 这张图片背景未纯色,我们平时用PhotoShop抠起来也比较简单,对我们计算机来说也不是什么难题,下面是效果图: 因为本身是PNG图片,而且原图是白色背景,所以看不出什么

随机推荐