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

1、 EasyExcel简介

2、导入相应的依赖文件

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

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

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

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

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


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、查看数据库对应的信息是否添加完成

可以按照以下步骤使用 Vue、Spring BootEasyExcelExcel 表格导入数据库: 1. 创建一个 Vue 页面,使用 Element UI 的 Upload 组件上传 Excel 文件,并在上传成功后调用后端接口。 2. 在 Spring Boot 后端中,使用 EasyExcel 将上传的 Excel 文件转换为 Java 对象。 3. 将 Java 对象保存数据库中,可以使用 Spring Data JPA 或 Mybatis 等框架进行操作。 下面是一个示例代码: Vue 页面代码: ```html <template> <div> <el-upload class="upload-demo" ref="upload" :action="uploadUrl" :on-success="handleUploadSuccess" :file-list="fileList" :auto-upload="false" > <el-button slot="trigger" size="small" type="primary">选取文件</el-button> <el-button size="small" type="success" @click="submitUpload">上传到服务器</el-button> <div slot="tip" class="el-upload__tip">只能上传 xlsx 文件</div> </el-upload> </div> </template> <script> import axios from 'axios'; export default { data() { return { fileList: [], uploadUrl: '/api/upload', }; }, methods: { handleUploadSuccess(response) { this.fileList.push(response.data.file); }, submitUpload() { const formData = new FormData(); formData.append('file', this.fileList[0].raw); axios.post(this.uploadUrl, formData, { headers: { 'Content-Type': 'multipart/form-data', }, }).then(() => { this.$message.success('上传成功'); }); }, }, }; </script> ``` Spring Boot 后端代码: ```java @RestController @RequestMapping("/api") public class UploadController { @PostMapping("/upload") public void upload(@RequestParam("file") MultipartFile file) { try { List<DemoData> dataList = EasyExcel.read(file.getInputStream()).head(DemoData.class).sheet().doReadSync(); // 保存 dataList 到数据库中 } catch (IOException e) { e.printStackTrace(); } } } ``` 其中,DemoData 是要导入Excel 表格的实体类,可以使用 @ExcelProperty 注解标注表格的每一列对应的属性。需要注意的是,在使用 EasyExcel 进行读取时,Excel 表格的第一行会被默认为表头,因此需要在读取表格时指定表头对应的实体类。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

西西o

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

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

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

打赏作者

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

抵扣说明:

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

余额充值