推广 热搜: csgo  vue  2023  angelababy  gps  信用卡  新车  htc  落地  控制 

mybatis-plus 实现真实批量插入

   2023-07-22 网络整理佚名1320
核心提示:其中基本的增删改查,代码生成器想必大家用着那叫一个爽。比如,,看着这不是批量新增,批量新增或更新嘛,看着api进行开发,感觉也太好用啦。该方法一个缺点是如果表的字段较多,有个几十个字段,写批量新增,批量新增修改的sql语句真是个噩梦。新添加了一个sql注入器,通过sql注入器可以实现批量新增,批量新增修改功能。缺点就是项目启动时候,会进行sql注入器注册,稍微影响启动速度。

一、背景

最近的-plus框架的更新,让我们的基础开发如虎添翼。 其中,基本的增删改查,代码生成器大家一定都会用,非常爽。 在我的使用过程中,我也遇到了一些陷阱。 比如看这个不是批量添加,批量添加或者更新,看api进行开发,感觉太好用了。 开发测试了一下,速度就像蜗牛一样,对于大数据量来说确实难以忍受。 我在控制台上发现,名义上是批量插入或者是一条一条插入,难怪速度那么慢。

2. 解决方案

查阅网上信息一般有两种解决方案:

(1). 使用xml,自己写sql语句。 这种方法的一个缺点是,如果表中的字段很多,而且有几十个字段,那么编写批量添加、批量修改的SQL语句实在是一场噩梦。

INSERT INTO t 
    (id, age) 
VALUES 
    (3, 28),
    (4, 29) 
ON DUPLICATE KEY UPDATE
    id = VALUES(id),
    age = VALUES(age);

(2)-plus新增了sql注入器,可以通过sql注入器实现批量添加和批量添加修改功能。 一次注射,随时使用,使用极其方便。 缺点是项目启动时会注册sql注入器,稍微影响启动速度。

3.添加依赖


<dependency>
    <groupId>com.baomidougroupId>
    <artifactId>mybatis-plus-extensionartifactId>
    <version>3.4.3.4version>
dependency>

4.继承默认方法注入

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, TableInfo tableInfo) {
        List methodList = super.getMethodList(mapperClass, tableInfo);
        methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE));
        return methodList;
    }
}

5、在配置文件中注入Bean

@Configuration
@EnableTransactionManagement
public class MybatisPlusConfig {
    
//    @Bean
//    public PaginationInterceptor paginationInterceptor() {
//        PaginationInterceptor page = new PaginationInterceptor();
//        page.setDialectType("mysql");
//        return new PaginationInterceptor();
//    }
    // 最新版
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
    @Bean
    public metaObjectHandler metaObjectHandler() {
        return new MymetaObjectHandler();
    }
    @Bean
    public GlobalConfig globalConfiguration() {
        GlobalConfig conf = new GlobalConfig();
        // 自定义的注入需要在这里进行配置
        conf.setSqlInjector(easySqlInjector());
        return conf;
    }
    @Bean
    public EasySqlInjector easySqlInjector() {
        return new EasySqlInjector();
    }

6. 自带扩展

包下新建一个接口,扩展自带

import com.baomidou.mybatisplus.core.mapper.baseMapper;
import java.util.List;
public interface EasybaseMapper extends baseMapper {
    
    Integer insertBatchSomeColumn(List entityList);
}

7. 业务实现

mapper继承
public interface MonitorReportRecordMapper extends EasybaseMapper {
}

层使用

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xinchen.admin.modules.monitoranalysis.mapper.MonitorReportRecordMapper;
import com.xinchen.api.monitoranalysis.entity.MonitorReportRecord;
import com.xinchen.api.utils.DateUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@Service
public class MonitorReportRecordService extends ServiceImpl {
    @Transactional(rollbackFor = Exception.class)
    public void updateMonitorRecord(List insertList) {
        this.baseMapper.insertBatchSomeColumn(insertList);
    }
}

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON