首页 > 其他分享 >mybatis-plus-extension 百万数据多行插入,几秒入库

mybatis-plus-extension 百万数据多行插入,几秒入库

时间:2024-03-18 12:27:06浏览次数:25  
标签:mapper java extension ysyn plus tring mybatis import com

百万数据多行插入,几秒入库

最近遇到过一个导入大批量数据耗时过长的问题,查了一下资料,找到一个mybatis-puls的一个插入,大大提高了入库效率,这里给大家分析分析。

先介绍一下,本次测试用例是MVC三层结构的例子,大概结构如下:

pom.xml
com.tring.ysyn.entity.Pull.java //数据库实体类
com.tring.ysyn.service.IPullService.java //接口
com.tring.ysyn.service.impl.PullServiceImpl.java //实现类
com.tring.ysyn.mapper.PullMapper.java //实体对应的mapper
com.tring.ysyn.mapper.EasyBaseMapper.java //自定义mapper
com.tring.ysyn.controller.TestController.java //测试类

 

1、pom导入 mybatis-plus-extension

<!-- Mybatis-Plus 多行插入 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-extension</artifactId>
            <version>3.5.2</version>
        </dependency>

 

2、编写一个EasyBaseMapper.java,继承 BaseMapper

package com.tring.ysyn.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import java.util.Collection;

/**
 * @author Tring
 * date 2023-03-26
 */
public interface EasyBaseMapper<T> extends BaseMapper<T> {

    /**
     * 多行插入(方法名字不能改)
     * @param entityList
     * @return
     */
    Integer insertBatchSomeColumn(Collection<T> entityList);
}

3、将PullMapper.java 由原来的继承BaseMapper,改为继承 自定义mapper,EasyBaseMapper.java

package com.tring.ysyn.mapper;

import com.tring.ysyn.entity.Pull;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zirong.kuang
 * @since 2024-03-15
 */
public interface PullMapper extends EasyBaseMapper<Pull> {

}

4、接口IPullService.java 定义一个批量插入的方法 batchInsertPull 

package com.tring.ysyn.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.tring.ysyn.entity.Pull;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zirong.kuang
 * @since 2024-03-15
 */
public interface IPullService extends IService<Pull> {

    void batchInsertPull(List<Pull> dto);

}

5、接口实现类 PullServiceImpl.java ,直接调用自定义mapper的 insertBatchSomeColumn 方法

package com.tring.ysyn.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.tring.ysyn.entity.Pull;
import com.tring.ysyn.mapper.PullMapper;
import com.tring.ysyn.service.IPullService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StopWatch;

import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zirong.kuang
 * @since 2024-03-15
 */
@Service
@Slf4j
public class PullServiceImpl extends ServiceImpl<PullMapper, Pull> implements IPullService {

    @Override
    public void batchInsertPull(List<Pull> dto) {
        StopWatch sw = new StopWatch();
        sw.start("sapOtherList");
        this.baseMapper.insertBatchSomeColumn(dto);
        sw.stop();
        log.info(sw.prettyPrint());
    }
}

6、最后写一个测试类 TestController.java

package com.tring.ysyn.controller;

import com.tring.ysyn.entity.Pull;
import com.tring.ysyn.service.IPullService;
import com.tring.ysyn.util.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.util.List;

/**
 * @author Tring
 * date 2022-10-22
 */
@RestController
@RequestMapping("/test")
public class TestController {

    @Autowired
    private IPullService pullService;

    private AutoCloseable AutoCloseable;

    @PostMapping ("/test")
    public Result test(@Valid @RequestBody List<Pull> dto){
        Result result = new Result();

        pullService.batchInsertPull(dto);
        result.setCode(200);
        System.out.println(dto.size());
        result.setMsg("调用成功");
        return result;
    }
}

 

最后我用11万数据测试了一下,正常导入要几分钟的数据,这里只用了短短9秒入库。

 

觉得对你有帮助的,点个支持吧!

 

标签:mapper,java,extension,ysyn,plus,tring,mybatis,import,com
From: https://www.cnblogs.com/LarryBlogger/p/18080057

相关文章

  • MyBatisPlus 之四:MP 的乐观锁和逻辑删除、分组、排序、链式的实现步骤
    乐观锁乐观锁是相对悲观锁而言的,乐观锁假设数据一般情况不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果冲突,则返回给用户异常信息,让用户决定如何去做。乐观锁适用于读多写少的场景,这样可以提高程序的吞吐量。乐观锁采取了更加宽松的加......
  • TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for xx.ts
    TypeError[ERR_UNKNOWN_FILE_EXTENSION]:Unknownfileextension".ts"假如你在编写一个Typescript库函数,你希望将其编译为ESModule,那么你可以通过在package.json中声明"type":"module"来告诉使用者你的库函数使用的模块规范是ESModule。但如果你使用ts-node来运......
  • 疫苗接种管理系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍疫苗接种管理系统是一种旨在提高疫苗注射效率、确保接种记录准确性的信息系统。在全球疫情常态化防控的背景下,此类系统对于实现疫苗的快速分发、接种情况追......
  • 养老公寓管理系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍随着社会老龄化的加速,养老服务成为社会关注的焦点。养老公寓作为服务老年人群的重要居住形式,其管理水平直接影响到老年人的生活质量和家属的满意度。一个功......
  • Mybatis-plus构建wrapper条件时出现索引越界异常Caused by: org.apache.ibatis.except
    项目场景:学习springboot整合mybatis-plus时通过构建器执行相关操作@AutowiredBookMappermapper;@Testvoidtest(){QueryWrapper<Book>wrapper=newQueryWrapper<>();wrapper.select("id","name","press")//只查询前三......
  • 【MyBatis-Plus】最优化持久层开发 快速入门 核心功能介绍与实战 3.5.3.1
    文章目录一、简介二、快速入门三、MyBatis-Plus核心功能3.1基于Mapper接口CRUD3.1.1Insert方法3.1.2Delete方法3.1.3Update方法3.1.4Select方法3.1.5自定义和多表映射3.2基于Service接口CRUD3.2.1对比Mapper接口CRUD区别:3.2.2使用Iservice接口方式3.2.3CRUD方......
  • 一键升级 ChatGPT Plus
    前言虽然目前ChatGPT4.0已经推出了有一段时间了,但是由于众所周知的原因,国内仍有许多人还没有体验过ChatGPT4.0,是因为ChatGPTPlus的升级还是存在一定门槛的,所以,本文将教你如何一键升级ChatGPTPlus。为什么升级ChatGPTPlusChatGPT4.0比ChatGPT3.5更加强大......
  • 智能酒店管理系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍随着科技的进步和旅游业的繁荣,酒店行业正面临着前所未有的机遇与挑战。为了提高服务质量、运营效率以及顾客满意度,智能酒店管理系统应运而生。这种系统利用......
  • 灾情信息管理系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍随着自然灾害频发,及时有效的灾情信息管理对于灾害应对和救援工作至关重要。一个专业的灾情信息管理系统能够帮助政府和救援组织快速收集、处理和分析灾区数......
  • 智慧教室预约(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍随着教育数字化转型的深入,智慧教室成为提升教学质量和效率的重要环境。智慧教室预约系统能够有效管理教学资源,实现教室使用的优化配置,确保设备高效利用。它......