使用 EasyExcel 操作exsel文件
导入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文件相关推荐
- EasyExcel实现Excel文件导入导出
1 EasyExcel简介 EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. github地址: https://git ...
- 使用代码操作Excel文件(easyExcel)
文章目录 1.Maven导入easyExcel包 2.easyExcel进行基本的写入 3. 编写代码:读和写 EasyExcel文档:https://www.yuque.com/easyexcel/ ...
- java excel导出2007_java操作excel文件,实现批量导出,和导入
一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...
- 一小时教你轻松学会使用Java 整合 Easy Excel 操作 Excel 文件
文章目录 一.Apache POI简介 二.POI操作Excel 构建maven项目导入依赖 使用POI实现基本写操作 使用POI实现大数据量写操作 使用POI实现基本读操作 使用POI读取不同类型的 ...
- easyExcel中导入文件参数校验实现方案
最近在使用easy Excel进行文件导入功能,文件读取完成需要对参数信息进行校验,下面总结一下自己在进行导入文件时参数校验的实现方案. 首先要清楚文件导入的流程:easy excel对exc ...
- EasyExcel实现Excel文件导入导出功能
一.EasyExcel简介 Java领域解析.生成Excel比较有名的框架有Apache poi.jxl等.但他们都存在一个严重的问题就是非常的耗内存.如果你的系统并发量不大的话可能还行,但是一旦并发 ...
- POI和EasyExcel操作Excel
POI和EasyExcel操作Excel 常用场景 1.将用户信息导出为excel表格(导出数据- ) 2.将Excel表中的信息录入到网站数据库(文件数据上传- ) 开发中经常会设计到excel的处 ...
- Alibaba开源工具EasyExcel读写Excel文件
前言 工作中使用 excel 表格处理数据是很常见的操作,经常会使用 excel 文件来导入数据或者导出数据,是不是脑海中已经思考有哪些处理excel框架? 小编之前呢就知道Java 解析.生成 Ex ...
- Java使用poi/easyexcel操作excel
前言 在工作的开发过过程中,我们总会遇到将数据导出到excel的需求,和导入excel到数据库,下面会讲解当今比较流行的两个工具实现Java操作excel: Apache POI 阿里巴巴的easye ...
最新文章
- linux 9.0挂载驱动
- 关于Android真机调測Profiler
- 配置Apache Basic和Digest认证
- 聊聊3种最常见的响应式设计问题
- node工程默认url_node 爬虫入门实例,简单易懂
- 陆奇:疫情后将出现哪些创业新机会?
- JAVA发送邮件(163邮箱发送)
- python机器学习实例
- DupanTools第三方不限速下载工具
- 如何使用 JQuery 提交 AJAX 表单
- Unty中通过镜像优化HDRI全景图体积
- 小程序毕设选题参考springboot学生选课小程序 java选课系统小程序 在线选课小程序 选课报名小程序 ssm选课系统 uniapp线上选课报名小程序
- 计算机报名照片没有重命名,电脑照片重命名怎么弄
- cocos creator pc web端 全屏
- 教你如何在虚拟机中安装镜像(图解)
- 使用饿了么update组件 实现多文件上传到后台以及本地图片显示功能
- Jexl表达式引擎(2)
- 汇顶科技(笔试加面试)
- 如何为你的网站添加标志性的图标(头像)呢?
- 照书写轮子——图的五种常见接口的实现(DFS、BFS、最小生成树问题、最短路径问题、关键路径问题)
热门文章
- 微信支付开发准备工作和详细步骤
- libVLC库下载及测试
- AD使用技巧——如何改变布线走线的角度
- 奶油面膜行业调研报告 - 市场现状分析与发展前景预测
- 母羊奶粉的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 吐血推荐珍藏的Visual Studio Code插件
- SyntaxError: Invalid regular expression: invalid group specifier name
- 转载 : 10大H5前端框架
- Pycharm安装、使用的一些操作
- ng-alain php,Angular 中后台前端解决方案 - Ng Alain 介绍