EasyExcel 简单导入

前边写过使用easyexcel进行简单、多sheet页的导出。今天周日利用空闲写一下对应简单的导入。

重点:springboot、easyExcel、桥接模式;

说明:本次使用实体类student:属性看前边章节内容;

1、公共导入service

public interface ExcelImportCommonService {/*** 获取类型: 如果是导入多种 sheet页/文件,可以根据这个 与 sheet页名/文件名比对,决定用哪个 serviceImpl* @return*/String getType();/*** 保存数据*/void save();/*** 获取 对应 实体类* @return*/Class<?> getEntityClazz();/*** 数据解析:一条一条解析的* @param o*/void invoke(Object o);
}

学生信息  实现类:


@Service
public class ExcelImportStudentServiceImpl implements ExcelImportCommonService {/*** TODO: 实际项目 引入 dao 保存 数据**/private List<Student> dataList = new ArrayList<>();@Overridepublic String getType() {return "学生信息表";}@Overridepublic void save() {// TODO  使用 dao 保存数据: dataListSystem.out.println("保存的数据是:" + Arrays.toString(dataList.toArray()));System.out.println(getType()+",保存数据成功!");}@Overridepublic void invoke(Object o) {//1、数据转换Student student = (Student) o;//2、去重:根据 特定字段 进行去重(可以是本次导入的数据,也可以是以前库里有的 做对比)//  举例:  如果 一次导入中  学生名 有重复的,就不再插入List<Student> repeat = dataList.stream().filter(student1 -> student1.getSName().equals(student.getSName())).collect(Collectors.toList());if(repeat.isEmpty()) {dataList.add(student);}}@Overridepublic Class<?> getEntityClazz() {return Student.class;}
}

2、extends监听器

监听器内引入:公共导入service (桥接模式的使用)


public class ExcelImportCommonListening extends AnalysisEventListener {// 使用了桥接模式: 抽象类  与  实现类 解耦: 在该类里引用 导入公共service接口private ExcelImportCommonService commonService;// 监听器中不能 使用 @Autowired 导入,这里使用 构造器public ExcelImportCommonListening(ExcelImportCommonService commonService) {this.commonService = commonService;}@Overridepublic void invoke(Object o, AnalysisContext analysisContext) {// 1、可以先做一些通用解析// 2、数据做一条一条具体的解析commonService.invoke(o);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {// 所有数据解析完成之后的操作commonService.save();}
}

3、学生信息导入 controller

@RestController
public class ExcelImport {@Resourceprivate ExcelImportStudentServiceImpl studentService;/*** 导入学生信息 excel*/@PostMapping(value = "importStudentExcel")public String importStudentExcel(MultipartFile file) {try {EasyExcel.read(file.getInputStream(), studentService.getEntityClazz(), new ExcelImportCommonListening(studentService)).sheet().doRead();} catch (IOException e) {System.out.println("导入学生信息excel异常:"+e);return "no";}return "yes";}
}

4、postman测试

示例excel就是上篇文章执行代码导出的,这里直接导入该文件(单sheet页)。

后续补充下一次导入多个sheet,或者多个文件的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/282327.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VR虚拟现实的七大应用领域

一、工业领域 园区利用虚拟现实技术优化生产管理与节能减排&#xff0c;实现提质增效降本。发展支持多人协作和模拟仿真的虚拟现实开放式服务平台&#xff0c;打通产品设计与制造环节&#xff0c;构建虚实融合的远程运维新型解决方案&#xff0c;适配各类先进制造技术的员工技…

十七、如何将MapReduce程序提交到YARN运行

1、启动某个节点的某一个用户 hadoopnode1:~$ jps 13025 Jps hadoopnode1:~$ yarn --daemon start resourcemanager hadoopnode1:~$ jps 13170 ResourceManager 13253 Jps hadoopnode1:~$ yarn --daemon start nodemanager hadoopnode1:~$ jps 13170 ResourceManager 15062 Jp…

【论文】 虚拟机 和 Linux容器 的 最新性能比较

虚拟机 和 Linux容器 的 最新性能比较 An Updated Performance Comparison of Virtual Machines and Linux Containers 借助DeepL辅助翻译 校准 摘要 云计算广泛使用虚拟机&#xff08;VM&#xff09;&#xff0c;因为它们允许工作负载相互隔离&#xff0c;并在一定程度上控…

SLAM学习笔记001

当向机器人下达移动到地点B的命令后&#xff0c;机器人不免会问三个颇具哲学性的问题&#xff0c;即“我在哪儿”“我将到何处去”“我该如何去”。slam导航技术涵盖&#xff1a;航天、军事、特种作业、工业生产、智慧交通、消费娱乐等slam导航的经典应用&#xff1a;火星探测车…

JS中浅拷贝和深拷贝

本篇文章咱们一起来学习下JS中的浅拷贝和深拷贝&#xff0c;了解它们在内存上的区别&#xff0c;并掌握浅拷贝和深拷贝的常用实现方法。 引用赋值 在学习拷贝之前&#xff0c;咱们先来看一个常见的情景&#xff0c;如下图&#xff1a; 大家觉得这是深拷贝还是浅拷贝&#xff0…

【计算机网络】—— 详解码元,传输速率的计算|网络奇缘系列|计算机网络

&#x1f308;个人主页: Aileen_0v0&#x1f525;系列专栏: 一见倾心,再见倾城 --- 计算机网络~&#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 码元 速率和波特 思考1 思考2 思考3 带宽&#xff08;Bandwidth&#xff09; &#x1f4dd;总结 码元…

Android属性动画

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、常用API3.1 ValueAnimator3.2 Obje…

基于AT89C52单片机的计算器设计与仿真

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/88637995?spm1001.2014.3001.5503 源码获取 B 源码仿真图课程设计51 摘 要 计算器一般是指“电子计算器”,能进行数学运算的手持机器&#xff0c;拥有集成电路芯…

广东高院严惩“套路贷”犯罪,保护校园安全

近日&#xff0c;广东高院发布了一批依法严惩“套路贷”犯罪的典型案例&#xff0c;其中一起涉及在校学生的“套路贷”案件引起了广泛关注。 这起案件中&#xff0c;张某等人针对在校大学生开展无抵押高息短期借款“套路贷”业务&#xff0c;通过频繁威胁恐吓、借新还旧、转单…

Linux:进程地址空间

目录 1.程序地址空间 2.进程地址空间 1.程序地址空间 我们在讲C/C语言的时候&#xff0c;32位平台下&#xff0c;我们见过这样的空间布局图 我们来验证一下这张图的正确性&#xff1a; int un_gval;int init_gval100;int main(int argc, char* argv[],char* env[]){//代码…

springMVC-模型数据的处理

一、数据放入到request域当中 1、把获取的数据放入request域中&#xff0c; 方便在跳转页面去显示 <a>添加主人信息</a> <form action"vote/vote04" method"post" >主人id&#xff1a;<input type"text" name"id&q…

Vue学习笔记-Vue3中的customRef

作用 创建一个自定义的ref&#xff0c;并对其依赖项的更新和触发进行显式控制 案例 描述&#xff1a;向输入框中输入内容&#xff0c;在下方延迟1秒展示输入内容 代码&#xff1a; <template><input type"text" v-model"keyword"><h3&…