easyExcel批量导入数据

1.依赖:

<!--easypoi依赖,excel导入导出-->
<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-spring-boot-starter</artifactId>
    <version>4.3.0</version>
</dependency>
<!--fastjson-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version>
</dependency>

<!--lombok-->

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.6</version>
</dependency>
<!--mybatis-plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>

2.通用listener ※

package com.**.example.conf;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.baomidou.mybatisplus.extension.service.IService;
import lombok.SneakyThrows;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 
 * @date 2024/01/12
 **/
@Component
public class ObjectExcelListener<T extends Object> extends AnalysisEventListener<T> {
    List<T> addList = new ArrayList<>();
    private static final int BATCH_COUNT = 10000;

    private IService<T> baseDao;

      
/**
 * 所有数据解析完了会来调用
 * @param context
*/
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        saveData();
    }
    /**
     * 返回数据
     *
     * @return 返回读取的数据集合
     **/
    public List<T> getDatas() {
        return addList;
    }
    /**
     * 设置读取的数据集合
     *
     * @param datas 设置读取的数据集合
     **/
    public void setDatas(List<T> datas) {
        this.addList = datas;
    }
    /**
     * 这个每一条数据解析都会来调用
     *
     * @param testCategory
     * @param analysisContext
     */
    @SneakyThrows
    @Override
    public void invoke(T testCategory, AnalysisContext analysisContext) {
        addList.add(testCategory);
//        if (addList.size() >= BATCH_COUNT ) {
//            saveData();
//            addList.clear();
//        }
    }
    /**
     * 加上存储数据库
     */
    private void saveData() {
        if (addList.isEmpty()) {
            return;
        }
        baseDao.saveBatch(addList);
    }

}

3.实体类:

package com.**.example.domain;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.sql.Date;
import java.time.LocalDate;


/**
 * @author 
 * @date 2024/01/11
 **/
@Data
@TableName("t_species_info")
public class SpeciesEntity {

    @ExcelIgnore
    @TableId(type = IdType.ASSIGN_UUID)
    private String speciesId;

    @ExcelProperty("名称")
    private String speciesName;

    @ExcelProperty("特有类型")
    private String isSpecific;

    @ExcelProperty("物种英文名")
    private String speciesNameEn;

    @ExcelProperty("物种分类")
    private String speciesType;

    @ExcelProperty("国家保护级别")
    private String protectLevel;

    @ExcelProperty("华盛顿公约濒危等级分类(CITES)")
    private String cites;

    @ExcelProperty("世界自然保护联盟濒危物种等级(IUCN)")
    private String iucn;

    @ExcelProperty("是否是极小种群")
    private int isTinyPopulation;

    @ExcelProperty("评估信息")
    private String evaluateInfo;

    @ExcelProperty("形态特征")
    private String feature;

    @ExcelProperty("数量")
    private String speciesNum;

    @ExcelProperty("数量单位")
    private String numUnit;

    @ExcelProperty("面积")
    private String speciesArea;

    @ExcelProperty("面积单位")
    private String areaUnit;

    @ExcelProperty("景区位置分布")
    private String distributedPosition;

    @ExcelProperty("功能用途")
    private String otherPoint;

    @ExcelProperty("是否为古树名木")
    private int ancientTreeFlag;

    @DateTimeFormat("yyyy-MM-dd")
    @ExcelProperty("入住时间")
    private String checkInTime;

    @ExcelProperty("入住年龄")
    private String checkInAge;
}

4.excel

5.读取文件

public int saveSpeciesData(MultipartFile file) {
    List<SpeciesEntity> list = null;
    long l = System.currentTimeMillis();
    try {
        list = EasyExcel.read(file.getInputStream(), SpeciesEntity.class, new ObjectExcelListener()).sheet().doReadSync();
        System.out.println(JSONArray.toJSONString(list));
        this.saveBatch(list);
    } catch (IOException e) {
        e.printStackTrace();
    }
    log.info("导入:{}条数据耗时:{}", list.size(), System.currentTimeMillis() - l);
    return list.size();
}
  • 26
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值