mybatisPlus实现真实批量插入操作

您所在的位置:网站首页 mybatis批量入库 mybatisPlus实现真实批量插入操作

mybatisPlus实现真实批量插入操作

2023-09-29 10:44| 来源: 网络整理| 查看: 265

场景:

在实际使用中发现mybaitsPlus的批量插入方法,并没有实现真正的批量插入,而是不断遍历循环插入;

问题:

如何实现真实批量插入?

解决:

1、方法一: 在数据库连接配置文件中,使用rewriteBatchedStatements=true 在这里插入图片描述 测试结果:速度确实有所提高,但是耗时仍然还是比较大

2、方法二: 直接采用手写sql的方式:

import cn.mindgd.domain.WarehouseDetail; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Param; import java.util.List; public interface WarehouseDetailMapper extends BaseMapper { @Insert("" + "INSERT INTO warehouse_detail(warehouse_record_id,material_id,a_number,b_number)VALUES" + " " + "(#{warehouseDetail.warehouseRecordId},#{warehouseDetail.materialId},#{warehouseDetail.aNumber},#{warehouseDetail.bNumber})" + " " + "")//批量建议手写sql boolean insertBatch(@Param("warehouseDetails") List warehouseDetails); }

效率很高

3、方法三: 导入pom依赖:

com.baomidou mybatis-plus-extension 3.4.0

1)创建配置类:

import com.example.bootmybatisplus.injector.EasysqlInjector; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * 插件 */ @EnableTransactionManagement @Configuration @MapperScan("com.baomidou.cloud.service.*.mapper*") public class MybatisPlusConfig { //需要注入的Bean @Bean public EasysqlInjector easysqlInjector() { return new EasysqlInjector(); } }

2)创建注入器,替代mybatisPlus默认的sql规则,因为mybatisPlus要适应多种数据库,采用默认通用策略,所以mysql针对性的批量操作并没有开启;

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; public class EasysqlInjector extends DefaultSqlInjector { @Override public List getMethodList(Class mapperClass) { List methodList = super.getMethodList(mapperClass); methodList.add(new InsertBatchSomeColumn()); return methodList; } }

3)创建通用mapper

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

我们自定的mapper类以前是继承BaseMapper,而现在要继承EasyBaseMapper ;如下: 在这里插入图片描述 对应service写法: 在这里插入图片描述 在这里插入图片描述 测试结果:10万数据速度提高了5倍之多;



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3