EasyExcel结合Springboot的将excel导入数据库

1、 EasyExcel简介

EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。

EasyExcel结合Springboot的将excel导入数据库_第1张图片

EasyExcel读取Excel的解析原理:

EasyExcel结合Springboot的将excel导入数据库_第2张图片

2、导入相应的依赖文件


    com.alibaba
    easyexcel
    2.2.3

3、编写对应数据库字段的pojo类,使用注解注入

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@TableName("t_ordersetting")
public class OrderSetting {

    @TableId(type = IdType.AUTO)
    private Integer id;

    //将java实体的属性和excel文件的列对应起来
    @ExcelProperty("日期")
    @TableField(value = "orderDate")
    private Date orderDate;
    @ExcelProperty("可预约数量")
    private Integer number;
    private Integer reservations = 0;
}

4、编写对应下载的接口文件

(这里为固定的模版,不需要可以的去记录,大概了解执行流程即可,取即可用)


    @PostMapping("/upload")
    public Result upload(MultipartFile excelFile) throws IOException {
        //springboot项目回头发布时,以jar包形式发布,接收文件时,能否将一个文件写到项目的jar包中? 无法实现的
        //springboot项目接受文件时,一般采用外部存储方式进行存储.① 存到服务器的本地(某个目录) ② 存储到分布式文件存储系统里(七牛云、阿里云、fastdfs、minio)

        if (excelFile != null) {
            //将文件存储到当前机器的某个目录
            String baseDir = "/Users/xixi/Desktop/helpht";

            //获取上传的文件的文件名 (ordersetting_template.xlsx)
            String originalFilename = excelFile.getOriginalFilename();
            String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
            //生成一个唯一文件名
            String uniqueFilename = UUID.randomUUID().toString().replaceAll("-", "") + suffix;

            String dirPath = baseDir ;
            //确保存放文件的目录是存在的
            File dirFile = new File(dirPath);
            if (!dirFile.exists()){
                dirFile.mkdirs();
            }

            //最终存放文件的文件路径
            String filePath = dirPath + "/" + uniqueFilename;

            //保存文件
            excelFile.transferTo(new File(filePath));

            //读取上传后的文件中的内容,将数据添加/更新到ordersetting表中
            /*
                参数一File file: 要读取的目标文件
                参数二Class head :将目标文件中的行记录封装到java的那个类型对象
                参数三ReadListener readListener :读取过程中的回调对象(每读取一行,封装成一个对象后,都会触发这个对象的invoke方法)
             */
            List orderSettings = new ArrayList<>();
            EasyExcel.read(new File(filePath),OrderSetting.class,new SyncReadListener(){
                @Override
                public void invoke(Object object, AnalysisContext context) {
                    orderSettings.add((OrderSetting) object);
                }
            }).doReadAll();


            //更新或者添加
            for (OrderSetting orderSetting : orderSettings) {
                ordersettingService.addOrUpdate(orderSetting);
            }

            return Result.success(null);
        }


        return Result.error(Result.ERROR,"文件不能为空");
    }

5、需要准备对应的模版excel,同时在里面添加想要输入的字段信息

EasyExcel结合Springboot的将excel导入数据库_第3张图片

6、使用ApiPost进行Controller接口的测试(导入模版文件执行)

EasyExcel结合Springboot的将excel导入数据库_第4张图片

7、查看数据库对应的信息是否添加完成

EasyExcel结合Springboot的将excel导入数据库_第5张图片

你可能感兴趣的:(excel,spring,boot,mysql)