首页 > 数据库 >mybatisPlus使用sql注入器实现真正批量插入

mybatisPlus使用sql注入器实现真正批量插入

时间:2024-07-15 15:32:53浏览次数:11  
标签:core mybatisPlus 批量 sql springframework org import com mybatisplus

注入器

package com.ruoyi.framework.interceptor;

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;

/**
 * @description:  sql注入器
 * @create: 2024-07-12 17:25
 **/
public class InsertBatchSqlInjector extends DefaultSqlInjector {
  @Override
  public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
    List<AbstractMethod> methodList = super.getMethodList(mapperClass);
    methodList.add(new InsertBatchSomeColumn());
    return methodList;
  }
}

添加配置

package com.ruoyi.framework.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.interceptor.InsertBatchSqlInjector;
import org.apache.ibatis.io.VFS;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.util.ClassUtils;

import javax.sql.DataSource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;

/**
 * Mybatis Plus 配置
 *
 * @author ruoyi
 */
@EnableTransactionManagement(proxyTargetClass = true)
@Configuration
public class MybatisPlusConfig
{

    /**
     * sql注入器
     */
    @Bean
    public InsertBatchSqlInjector insertBatchSqlInjector() {
        return new InsertBatchSqlInjector();
    }
}

新增一个MyBaseMapper

package com.ruoyi.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;

/**
 * @description:
 * @create: 2024-07-12 17:32
 **/
public interface MyBaseMapper<T> extends BaseMapper<T> {
  // 批量插入
  int insertBatchSomeColumn(@Param("list") List<T> batchList);
}

然后继续MyBaseMapper就可以用了

@Mapper
public interface CouponEntityMapper extends MyBaseMapper<CouponEntity>

使用泛型做成公共接口


@Transactional(rollbackFor = Exception.class)
public <T> void batchInsert(List<T> entityList, MyBaseMapper<T> baseMapper) {
int batchSize = 1000; // 每批次插入的记录数
    for (int i = 0; i < entityList.size(); i += batchSize) {
        List<T> batchList = entityList.subList(i, Math.min(i + batchSize, entityList.size()));
        baseMapper.insertBatchSomeColumn(batchList);
    }
}

 

标签:core,mybatisPlus,批量,sql,springframework,org,import,com,mybatisplus
From: https://www.cnblogs.com/jiutang001/p/18303247

相关文章

  • MySQL高级应用指南:从数据库设计到高可用架构
    引言欢迎阅读这篇MySQL文章本文旨在帮助你更深入地了解和掌握MySQL数据库的高级应用技术通过一些实际的开发案例和代码示例你将能够更好地运用MySQL进行复杂的数据操作和管理分类教程一数据库设计与优化在设计和优化数据库时需要考虑到表结构(TableStructure)索引(I......
  • java连接oracle执行sql语句
    一个简单的示例importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.sql.Statement;publicclassOracleJdbcExample{publicstaticvoidmain(String[]args){//Oracle数据库的JDBCURL,用户名和密码......
  • 基于SpringBoot+MySQL+SSM+Vue.js的购物商城系统(附论文)
    获取见最下方名片获取见最下方名片获取见最下方名片演示视频基于SpringBoot+MySQL+SSM+Vue.js的购物商城系统(附论文)技术描述开发工具:Idea/Eclipse数据库:MySQLJar包仓库:Maven前端框架:Vue/ElementUI后端框架:Spring+SpringMVC+Mybatis+SpringBoot文字描......
  • 基于SpringBoot+MySQL+SSM+Vue.js的家政公司服务平台系统(附论文)
    获取见最下方名片获取见最下方名片获取见最下方名片演示视频基于SpringBoot+MySQL+SSM+Vue.js的家政公司服务平台系统(附论文)技术描述开发工具:Idea/Eclipse数据库:MySQLJar包仓库:Maven前端框架:Vue/ElementUI后端框架:Spring+SpringMVC+Mybatis+SpringBoo......
  • SQL Server sa账号被锁定
    SQLServer的sa账号老是被锁(登录已锁定)问题:最近sa登录老是被锁定,去查看数据库->安全性->sa账号右键属性,在状态选项卡中找到sqlserver身份验证,发现“登录已锁定”被勾选了;把这个勾选去掉,然后提示必须修改密码。“登录已锁定”的勾选去掉并修改密码后又能使用十多分钟,如此反......
  • 【原创软件】第7期:文件夹生成器V1.0-按照列表批量生成文件夹,简单小巧
    一、背景因为工作需要,需要批量创建文件夹。为了省去人工创建时间,使用aardio制作了一个软件。  二、功能演示  三、下载地址 https://www.123pan.com/s/9Rn9-1xppH.html  四、源代码 源代码分享:importwin.ui;importfsys;importfsys.dlgimportproce......
  • Windows Server 2022 中SQL查询报错:error setting locale info for codepage 65001(取
    解决问题:刚开始我以为是SQLServer升级过程中遇到错误,后面仔细检查错误日志,发现我忽略了一个重要的错误信息“Thecodepage65001isnotsupportedbytheserver.”,codepage65001对应的编码为UTF-8,而数据库排序规则为Chinese_PRC_CI_AS,对应的codepage为936。原来这台SQLSe......
  • mysql 查询
    它的别名是positioninselect*from表名wherelocate(字符,字段)select*from表名whereposition(字符in字段);例子:判断site表中的url是否包含'http://'子串,如果不包含则拼接在url字符串开头updatesiteseturl=concat('http://',url)wherelocate('http://',url......
  • MySQL - [17] Oracle、SQLServer、MySQL数据类型对比
    题记部分 一、数据类型对比对应关系(1)整数类型Oracle的NUMBER(*,0)对应SQLServer的INT和MySQL的INTOracle的BIGINT可能需要映射到SQLServer的BIGINT和MySQL的BIGINT(2)浮点数类型Oracle的BINARY_FLOAT/BINARY_DOUBLE对应SQLServer的FLOAT和MySQL......
  • sqlalchemy 递归查询
    背景:有个一个组织机构.并没有设计父级id,只有id,title,nature三个字段,nature=1/2/3/4分别表示级几级单位;现在要模糊查询本级,上级,上上级,上上上级的title中包含特定字符的记录;使用sqlalchemy递归查询,下面代码没调试,不保证运行,主要看思路;deffind_orgs_wit......