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

1、 EasyExcel简介

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

EasyExcel读取Excel的解析原理:

2、导入相应的依赖文件

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.3</version>
</dependency>

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<OrderSetting> 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,同时在里面添加想要输入的字段信息

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

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

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西西o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值