导入easyExcel依赖,而且easyExcel依赖于 阿帕奇poi,因为是对阿帕奇poi的再次封装

    <dependencies><!--EasyExcel依赖--><!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.1</version></dependency></dependencies>

excel文件,我们做的就是把文件的信息及分类添加到数据库

excel对应的实体类,后面读取excel文件时会用到,和 excel 文件一一对应 @ExcelProperty(index= 0)表示第一列

package com.atguigu.eduservice.entity.excel;import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;@Data
public class SubjectData {@ExcelProperty(index = 0)private String oneSubjectName;@ExcelProperty(index = 1)private String twoSubjectName;
}

数据库对应的实体类

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="EduSubject对象", description="课程科目")
public class EduSubject implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "课程类别ID")@TableId(value = "id", type = IdType.ID_WORKER_STR)private String id;@ApiModelProperty(value = "类别名称")private String title;@ApiModelProperty(value = "父ID")private String parentId;@ApiModelProperty(value = "排序字段")private Integer sort;@ApiModelProperty(value = "创建时间")@TableField(fill = FieldFill.INSERT)private Date gmtCreate;@ApiModelProperty(value = "更新时间")@TableField(fill = FieldFill.INSERT_UPDATE)private Date gmtModified;}

EduSubjectController层在controller中调用service的saveSubject,把文件传到service

@RestController
@RequestMapping("/eduservice/edu-subject")
@CrossOrigin
public class EduSubjectController {//注入service@Autowiredprivate EduSubjectService subjectService;//添加课程分类@PostMapping("addSubject")public R addSubject(MultipartFile file){//调用service读取文件subjectService.saveSubject(file,subjectService);return R.ok();}
}

service层

public interface EduSubjectService extends IService<EduSubject> {void saveSubject(MultipartFile file,EduSubjectService subjectService);}

service实现层,在serviceImlp中调用EasyExcel对象进行文件数据的读取

@Service
public class EduSubjectServiceImpl extends ServiceImpl<EduSubjectMapper, EduSubject> implements EduSubjectService {@Overridepublic void saveSubject(MultipartFile file,EduSubjectService subjectService) {try{//获取文件输入流InputStream inputStream = file.getInputStream();//调用EasyExcelEasyExcel.read(inputStream, SubjectData.class,new SubjectExcelListener(subjectService)).sheet().doRead();}catch (Exception e){e.printStackTrace();}}
}

创建listener包 SubjectExcelListener类实现 AnalysisEventListener<SubjectData这里放与excel文件对应的实体类>接口的 easyExcel监听器

package com.atguigu.eduservice.listener;import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.atguigu.eduservice.entity.EduSubject;
import com.atguigu.eduservice.entity.excel.SubjectData;
import com.atguigu.eduservice.service.EduSubjectService;
import com.atguigu.servicebase.exceptionhandler.GuliException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;public class SubjectExcelListener extends AnalysisEventListener<SubjectData> {//监听器没有被spring容器管理,不能直接操作数据库,通过new监听器时,传入subjectService调用有参构造注入servicepublic EduSubjectService subjectService;public SubjectExcelListener() {}public SubjectExcelListener(EduSubjectService subjectService) {this.subjectService = subjectService;}/*** 读取 Excel 文件内容,一行一行的读取* */@Overridepublic void invoke(SubjectData subjectData, AnalysisContext analysisContext) {//判断文件是否为空if(subjectData == null){throw new GuliException(20001,"文件数据为空");}//不为空插入数据库//插入一级分类EduSubject existOneSubject = this.existOneSubject(subjectService, subjectData.getOneSubjectName());//如果一级分类不存在插入数据库if(existOneSubject == null){//为空,new 一个 EduSubject 插入数据库existOneSubject = new EduSubject();existOneSubject.setParentId("0");existOneSubject.setTitle(subjectData.getOneSubjectName());  //一级分类名称subjectService.save(existOneSubject);}//插入二级分类String pid = existOneSubject.getId();  //如果一级分类不为空,获取一级分类ID,如果一级分类不存在,插入数据库成功一定不为空,获取IDEduSubject existTwoSubject = this.existTwoSubject(subjectService,subjectData.getTwoSubjectName(),pid);//如果二级分类不存在插入数据库if(existTwoSubject == null){//为空,new 一个 EduSubject 插入数据库existTwoSubject = new EduSubject();existTwoSubject.setParentId(pid);existTwoSubject.setTitle(subjectData.getTwoSubjectName());  //一级分类名称subjectService.save(existTwoSubject);}}//判断一级分类不能重复添加private EduSubject existOneSubject(EduSubjectService subjectService,String name){QueryWrapper<EduSubject> wrapper = new QueryWrapper<>();wrapper.eq("title",name);wrapper.eq("parent_id","0");EduSubject oneEduSubject = subjectService.getOne(wrapper);return oneEduSubject;}//判断二级分类不能重复添加private EduSubject existTwoSubject(EduSubjectService subjectService,String name,String pid){QueryWrapper<EduSubject> wrapper = new QueryWrapper<>();wrapper.eq("title",name);wrapper.eq("parent_id",pid);EduSubject twoEduSubject = subjectService.getOne(wrapper);return twoEduSubject;}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {}
}

在丝袜哥中测试接口

数据库刷新

使用 EasyExcel 操作exsel文件相关推荐

  1. EasyExcel实现Excel文件导入导出

    1 EasyExcel简介 EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. github地址: https://git ...

  2. 使用代码操作Excel文件(easyExcel)

    文章目录 1.Maven导入easyExcel包 2.easyExcel进行基本的写入 3. 编写代码:读和写 EasyExcel文档:https://www.yuque.com/easyexcel/ ...

  3. java excel导出2007_java操作excel文件,实现批量导出,和导入

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...

  4. 一小时教你轻松学会使用Java 整合 Easy Excel 操作 Excel 文件

    文章目录 一.Apache POI简介 二.POI操作Excel 构建maven项目导入依赖 使用POI实现基本写操作 使用POI实现大数据量写操作 使用POI实现基本读操作 使用POI读取不同类型的 ...

  5. easyExcel中导入文件参数校验实现方案

    最近在使用easy Excel进行文件导入功能,文件读取完成需要对参数信息进行校验,下面总结一下自己在进行导入文件时参数校验的实现方案.     首先要清楚文件导入的流程:easy excel对exc ...

  6. EasyExcel实现Excel文件导入导出功能

    一.EasyExcel简介 Java领域解析.生成Excel比较有名的框架有Apache poi.jxl等.但他们都存在一个严重的问题就是非常的耗内存.如果你的系统并发量不大的话可能还行,但是一旦并发 ...

  7. POI和EasyExcel操作Excel

    POI和EasyExcel操作Excel 常用场景 1.将用户信息导出为excel表格(导出数据- ) 2.将Excel表中的信息录入到网站数据库(文件数据上传- ) 开发中经常会设计到excel的处 ...

  8. Alibaba开源工具EasyExcel读写Excel文件

    前言 工作中使用 excel 表格处理数据是很常见的操作,经常会使用 excel 文件来导入数据或者导出数据,是不是脑海中已经思考有哪些处理excel框架? 小编之前呢就知道Java 解析.生成 Ex ...

  9. Java使用poi/easyexcel操作excel

    前言 在工作的开发过过程中,我们总会遇到将数据导出到excel的需求,和导入excel到数据库,下面会讲解当今比较流行的两个工具实现Java操作excel: Apache POI 阿里巴巴的easye ...

最新文章

  1. linux 9.0挂载驱动
  2. 关于Android真机调測Profiler
  3. 配置Apache Basic和Digest认证
  4. 聊聊3种最常见的响应式设计问题
  5. node工程默认url_node 爬虫入门实例,简单易懂
  6. 陆奇:疫情后将出现哪些创业新机会?
  7. JAVA发送邮件(163邮箱发送)
  8. python机器学习实例
  9. DupanTools第三方不限速下载工具
  10. 如何使用 JQuery 提交 AJAX 表单
  11. Unty中通过镜像优化HDRI全景图体积
  12. 小程序毕设选题参考springboot学生选课小程序 java选课系统小程序 在线选课小程序 选课报名小程序 ssm选课系统 uniapp线上选课报名小程序
  13. 计算机报名照片没有重命名,电脑照片重命名怎么弄
  14. cocos creator pc web端 全屏
  15. 教你如何在虚拟机中安装镜像(图解)
  16. 使用饿了么update组件 实现多文件上传到后台以及本地图片显示功能
  17. Jexl表达式引擎(2)
  18. 汇顶科技(笔试加面试)
  19. 如何为你的网站添加标志性的图标(头像)呢?
  20. 照书写轮子——图的五种常见接口的实现(DFS、BFS、最小生成树问题、最短路径问题、关键路径问题)

热门文章

  1. 微信支付开发准备工作和详细步骤
  2. libVLC库下载及测试
  3. AD使用技巧——如何改变布线走线的角度
  4. 奶油面膜行业调研报告 - 市场现状分析与发展前景预测
  5. 母羊奶粉的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  6. 吐血推荐珍藏的Visual Studio Code插件
  7. SyntaxError: Invalid regular expression: invalid group specifier name
  8. 转载 : 10大H5前端框架
  9. Pycharm安装、使用的一些操作
  10. ng-alain php,Angular 中后台前端解决方案 - Ng Alain 介绍