spriboot+mybatis-plus[3.5.16]+mybatis-plus-core[3.5.7]实现批量插入

news/2024/9/19 9:13:34 标签: mybatis

引入包

<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-core</artifactId>
	<version>3.5.7</version>
	<exclusions>
		<exclusion>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
		</exclusion>
	</exclusions>
</dependency>

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>3.5.7</version>
</dependency>

<dependency>
    <artifactId>mybatis</artifactId>
    <groupId>org.mybatis</groupId>
    <version>3.5.16</version>
</dependency>

MyBatis-Plus提供的InsertBatchSomeColumn方法(推荐)

扩展这个InsertBatchSomeColumn方法

package io.jiefang.common.config;


import com.baomidou.mybatisplus.annotation.FieldFill;
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;

public class EasySqlInjector extends DefaultSqlInjector {
    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
        // 注意:此SQL注入器继承了DefaultSqlInjector(默认注入器),调用了DefaultSqlInjector的getMethodList方法,保留了mybatis-plus的自带方法
        List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo);
        methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE));
        System.out.println("扩展的getMethodList方法被框架调用了");
        return methodList;
    }
}

扩展的方法注入bean容器


package io.jiefang.common.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import io.jiefang.common.interceptor.DataFilterInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * mybatis-plus配置
 *
 * @since 1.0.0
 */
@Configuration
public class MybatisPlusConfig {
    @Bean
    public  EasySqlInjector sqlInjector(){
        return new EasySqlInjector();
    }
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        // 数据权限
        mybatisPlusInterceptor.addInnerInterceptor((InnerInterceptor) new DataFilterInterceptor());
        // 分页插件
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        // 乐观锁
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        // 防止全表更新与删除
        mybatisPlusInterceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
        return mybatisPlusInterceptor;
    }

}

创建一个Mapper去实现我们的扩展的



package io.jiefang.common.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.executor.BatchResult;
import java.util.Collection;
import java.util.List;
/**
 * 基础Dao
 */
public interface BaseDao<T> extends BaseMapper<T> {
    /**
     * 批量插入 仅适用于mysql
     *
     * @param entityList 实体列表
     * @return 影响行数
     */
    Integer insertBatchSomeColumn(Collection<T> entityList);
}

业务层

@Override
public Long add5() {
	long start = System.currentTimeMillis();
	List<User> userList= new ArrayList<>();
	User user ;
	for (int i = 0; i < 50; i++) {
		user = new User();
		user.setUsername("name"+i);
		user.setPassword("password"+i);
		userList.add(user);
	}
	userMapper.insertBatchSomeColumn(userList);
	long end = System.currentTimeMillis();
	System.out.println("耗时:"+( end - start ) + "ms");
	return (end-start);
}

http://www.niftyadmin.cn/n/5665320.html

相关文章

结合板载驱动以及考虑全志 ARM 开发板有温度传感器和显示屏等硬件设备开发示例

结合板载驱动以及考虑全志 ARM 开发板的一些可能的特殊调用情况。假设开发板上有温度传感器和显示屏等硬件设备&#xff0c;并且有对应的板载驱动可以访问这些硬件&#xff0c;以下是开发示例 一、硬件场景描述 全志 ARM 开发板上有温度传感器、显示屏以及其他一些外设。通过…

CentOS中使用DockerCompose方式部署带postgis的postgresql(附kartoza/docker-postgis镜像下载)

场景 CentOS中使用Docker部署带postgis的postgresql&#xff1a; CentOS中使用Docker部署带postgis的postgresql_centos postgis插件在容器中如何安装-CSDN博客 上面使用Docker搜索和拉取kartoza/postgis时并没有任何限制。 当下如果不能科学上网时&#xff0c;大部分镜像源…

TMS320F28335的GPIO

1 TMS320F28335 GPIO 介绍 1.1 GPIO 概念 1.2 GPIO 结构框图

HarmonyOS元服务与卡片

元服务与卡片 文章目录 一、元服务1.介绍2.常见元服务项目步骤 二、卡片1.介绍2.卡片的创建3.卡片的数据的变更4.卡片的进程间通讯4.1使用工具包4.2使用步骤 5.卡片路由postCardAction&#xff1a;快速拉起后台5.1格式5.2快速拉起指定页面--router5.3调用后台功能--call5.3卡片…

总结拓展十:SAP开发计划(上)

第一节 功能开发说明书介绍 1、功能开发的基础分类 报表查询开发单据打印开发功能开发增强开发接口开发 2、屏幕元素介绍 ——程序屏幕是SAP系统与用户之间的桥梁&#xff0c;屏幕由各种不同元素布局组成 示例&#xff1a;选择屏幕界面 单选输入框 多选输入框 设定默认…

MySQL高阶1783-大满贯数量

题目 找出每一个球员赢得大满贯比赛的次数。结果不包含没有赢得比赛的球员的ID 。 结果集 无顺序要求 。 准备数据 Create table If Not Exists Players (player_id int, player_name varchar(20)); Create table If Not Exists Championships (year int, Wimbledon int, F…

『 Linux 』HTTP(一)

文章目录 域名URLURLEncode和URLDecodeHTTP的请求HTTP的响应请求与响应的获取简单的Web服务器 域名 任何客户端在需要访问一个服务端时都需要一个IP和端口号,而当一个浏览器去访问一个网页时通常更多使用的是域名而不是IP:port的方式, www.baidu.com这是百度的域名; 实际上当浏…

Scikit-learn 学习笔记

安装&#xff1a; 在Scikit-learn中&#xff0c;数据通常表示为NumPy数组或Pandas DataFrame。特征数据&#xff08;X&#xff09;通常是一个二维数组&#xff0c;其中每一行代表一个样本&#xff0c;每一列代表一个特征。目标数据&#xff08;y&#xff09;通常是一个一维数组…