在线教育平台,easyexcel使用案例

控制器

因为如何想要在读数据的时候操作数据库,就必须使用构造方法传dao 或者service,因为这个不归spring管理,不能自动注入,所以参数里需要传递service 或者 dao

    @AutowiredIEduSubjectService subjectService;添加课程分类的方法 (文件本身不用保存到服务器,只是要将文件中的内容解析出来保存到数据库)@RequestMapping("/addSubject")public R addSubject(@RequestPart MultipartFile file)  {subjectService.saveSubject(file,subjectService);return R.ok();}

service层

public interface IEduSubjectService extends IService<EduSubject> {//添加课程分类的方法 (文件本身不用保存到服务器,只是要将文件中的内容解析出来保存到数据库)void saveSubject(MultipartFile file, IEduSubjectService subjectService);//查询所有课程分类信息List<OneSubject> findAllSubject();
}

impl

核心代码在监听器,控制器传递的service或者dao 就在这里传递给监听器,让监听器在里面通过构造方法进行调用

    public void saveSubject(MultipartFile file, IEduSubjectService subjectService){try {//取得文件的输入流对象InputStream inputStream = file.getInputStream();//解析文件中的内容,解析之后要将内容赋值给Customer类对对象// 第一个参数:输入流对象// 第二个参数:文件中的内容要解析指定的实体类对象// 第三个参数:是一个监听器ImportCustomerListenerEasyExcel.read(inputStream, SubjectData.class, new SubjectExcelListener(subjectService)).sheet().doRead();} catch (IOException e) {e.printStackTrace();}}

监听器

核心逻辑就在监听器中,继承 的监听器的泛型是 读取的Excel文件对应的实体类,每读一行都会触发invoke

public class SubjectExcelListener extends AnalysisEventListener<SubjectData> {private IEduSubjectService subjectService;//使用构造方法初始化 subjectServicepublic SubjectExcelListener() {}public SubjectExcelListener(IEduSubjectService subjectService) {this.subjectService = subjectService;}//将文件中的内容一行一行的读取--->将读取到的数据每次都存入SubjectData对象中@Overridepublic void invoke(SubjectData subjectData, AnalysisContext analysisContext) {//将解析出来的数据添加到数据库if (subjectData == null){throw new GlobalErrorException(20001,"文件数据为空");}//判断一级分类在数据库中是否存在EduSubject OneSubject = this.existOneSubject(subjectData.getOneSubjectName());if (OneSubject == null){//没有则添加一级分类OneSubject = new EduSubject();OneSubject.setTitle(subjectData.getOneSubjectName());OneSubject.setParentId("0");subjectService.save(OneSubject);
//            //获取添加一级分类后的id
//            String pid = eduSubject.getId();
//            //判断二级分类在数据库中是否存在
//            EduSubject existTwoSubject = this.existTwoSubject(subjectData.getTwoSubjectName(), pid);}// 处理二级标题//获取添加一级分类后的idString pid = OneSubject.getId();//添加二级分类//判断二级分类是否已经存在了EduSubject existTwoSubject = this.existTwoSubject(subjectData.getTwoSubjectName(), pid);if (existTwoSubject == null){EduSubject twoSubject = new EduSubject();twoSubject.setTitle(subjectData.getTwoSubjectName());twoSubject.setParentId(pid);subjectService.save(twoSubject);}}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {}/*** 判断二级分类是否存在* @param twoSubjectName* @return*/private EduSubject existTwoSubject(String twoSubjectName, String oneSubjectId) {QueryWrapper<EduSubject> wrapper = new QueryWrapper<>();wrapper.eq("title",twoSubjectName);wrapper.eq("parent_id",oneSubjectId);return  subjectService.getOne(wrapper);}/*** 判断一级分类是否存在* @param oneSubjectName* @return*/private EduSubject existOneSubject(String oneSubjectName) {QueryWrapper<EduSubject> wrapper = new QueryWrapper<>();wrapper.eq("title",oneSubjectName);wrapper.eq("parent_id",0);return  subjectService.getOne(wrapper);}
}

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

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

相关文章

Anaconda学习常见问题汇总

问题1&#xff1a;Fatal error in launcher: Unable to create process using ‘“d:\anaconda\isntall\envs\learn1\python.exe 在进行anaconda学习时&#xff0c;在控制台输入&#xff1a;pip list想要查看环境里的内容时发生错误&#xff1a; Fatal error in launcher: Un…

个人博客|PHP源码|支持多国语言切换

一. 前言 今天小编给大家带来了一款可学习&#xff0c;可商用的&#xff0c;支持多国语言的个人博客网站源码&#xff0c;支持二开&#xff0c;无加密。此博客相当简洁&#xff0c;也适合海外。详细界面和功能见下面视频演示。 如果您正好有此需求源码&#xff0c;请联系小编…

软件资产管理系统:提升企业软件资产透明度与合规性的终极解决方案!

在当今数字化转型浪潮中&#xff0c;企业软件资产管理的重要性日益凸显。然而&#xff0c;传统的手工管理方式往往效率低下&#xff0c;难以应对快速变化的软件环境。SmartLic软件资产管理系统应运而生&#xff0c;它以先进的技术手段&#xff0c;为企业提供全面的软件资产管理…

开源自动化热键映射工具autohotkey十大用法及精选脚本

AutoHotkey&#xff08;AHK&#xff09;是一款功能强大的热键脚本语言工具&#xff0c;它允许用户通过编写脚本来自动化键盘、鼠标等设备的操作&#xff0c;从而极大地提高工作效率。以下是AutoHotkey的十大经典用法&#xff0c;这些用法不仅解放了用户的双手&#xff0c;还展示…

程序化交易广告及其应用

什么是程序化交易广告&#xff1f; 程序化交易广告是以实时竞价技术即RTB&#xff08;real-time bidding&#xff09;为核心的广告交易方式。说到这里&#xff0c;你可能会有疑问&#xff1a;像百度搜索关键词广告还有百度网盟的广告&#xff0c;不也是CPC实时竞价的吗&#x…

MDX的魔法:探索SQL Server中的多维表达式

&#x1f4ca; MDX的魔法&#xff1a;探索SQL Server中的多维表达式 在商业智能和数据分析领域&#xff0c;SQL Server提供了一种强大的工具来处理多维数据集&#xff0c;这就是多维表达式&#xff08;Multidimensional Expressions&#xff0c;简称MDX&#xff09;。MDX是一种…

论文学习_UVSCAN: Detecting Third-Party Component Usage Violations in IoT Firmware

论文名称发表时间发表期刊期刊等级研究单位 Understanding the Security Risks Introduced by Third-Party Components in IoT Firmware 2024年IEEE TDSCCCF A佐治亚理工学院 1. 引言 研究背景&#xff1a;物联网&#xff08;IoT&#xff09;已经无处不在&#xff0c;为我们…

HQChart报价列表高级应用教程7-走势列数据对接

HQChart报价列表高级应用教程7-走势列数据对接 走势列小程序效果图PC效果图HQChart代码地址走势列类型配置走势列数据格式示例走势列 单独使用一列显示每个股票的走势图 小程序效果图 PC效果图 HQChart代码地址 地址:github.com/jones2000/HQChart 走势列类型 REPORT_COL…

[工业网络] 模型建立

普渡大学ICS参考模型 普渡企业参考架构&#xff08;PERA&#xff09;是由西奥多J威廉姆斯&#xff08;Theodore J. Williams&#xff09;和普渡大学计算机集成制造工业大学联盟的成员在1990年代开发的企业架构参考模型。该模型被ISA-99&#xff08;现为ISA/IEC 62443&#xff…

使用EndNote在Word中插入参考文献,并编辑参考文献样式方法

一、背景 在准备中期报告时&#xff0c;学校给的是Word模板&#xff0c;习惯了Latex排版和添加参考文献的便利后&#xff0c;真不想用word写东西。 之前投《机器人》期刊&#xff08;被拒了&#xff09;和准备开题的时候也是用word写的&#xff0c;当时为方便添加参考文献和定…

MyBatis 分页插件 PageHelper 简介

引言 PageHelper 是一款优秀的开源免费 MyBatis 分页插件&#xff0c;它极大地简化了分页查询的复杂性&#xff0c;支持多种主流数据库如 MySQL、Oracle、MariaDB、DB2 等。本文将详细介绍 PageHelper 的基本使用、配置参数、实现原理以及实际项目中的应用。 一、PageHelper …

Memcached中的CAS操作:确保数据一致性的原子武器

Memcached中的CAS操作&#xff1a;确保数据一致性的原子武器 在分布式缓存系统中&#xff0c;保持数据的一致性是一个重要而复杂的任务。Memcached作为一种高性能的分布式内存缓存系统&#xff0c;提供了一种称为Compare-And-Swap&#xff08;CAS&#xff09;的操作&#xff0…

解决fastjson自动过滤null值

解决fastjson自动过滤null值 使用 SerializerFeature.WriteNullStringAsEmpty 解决 List<HistoryVector> historyVectors new ArrayList<>();HistoryVector historyVector new HistoryVector();historyVector.setInput("1");historyVector.setReason(&q…

不锈钢酸退作业区2#冷线氧化锆分析仪信号传输系统的优化

不锈钢酸退作业区2#冷线氧化锆分析仪信号传输系统的优化 一、项目提出前状况: (一)不锈钢酸退作业区2#冷线退火炉烟气监测系统所使用的设备为横河氧化锆分析仪,此设备主要用于检测退火炉内天然气燃烧后烟气成分中的氧含量值,此设备的检测准确性直接影响产品质量,而且决定…

计算机操作系统部分选填及大题整理

并发和&#xff08; 共享 &#xff09; 是操作系统的两个最基本的特征,&#xff08; 虚拟 &#xff09;和&#xff08; 异步 &#xff09; 是操作系统的重要特征&#xff0c;并发执行的程序失去可再现性现代操作系统的两个基本特征是&#xff08;程序的并发执行&#xff09;和资…

万界星空科技QMS系统:重塑质量管理新纪元

万界星空科技QMS&#xff08;Quality Management System&#xff09;质量管理系统是一套全面、高效的质量管理工具&#xff0c;旨在帮助企业提升产品质量、优化生产流程、降低质量成本。该系统具备多个具体功能模块&#xff0c;以下是对其主要功能模块的详细介绍&#xff1a; 一…

Java中的线程安全问题及解决方案

Java中的线程安全问题及解决方案 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在多线程编程中&#xff0c;线程安全是一个至关重要的概念。当多个线程同时访…

JPA -EntityGraph 实体图失效问题

jpa查询方便了查询&#xff0c;但是有时会也会影响性能&#xff0c;有时候会加载深度过深和加载了不需要但非常占用内存的数据。所以此时可以使用实体图&#xff0c;懒加载或者不加载某些数据。这些数据可以是不同层级上的。 但是最近发现代码中出现实体图失效的问题。查询资料…

2024年7月3日 (周三) 叶子游戏新闻

老板键工具来唤去: 它可以为常用程序自定义快捷键&#xff0c;实现一键唤起、一键隐藏的 Windows 工具&#xff0c;并且支持窗口动态绑定快捷键&#xff08;无需设置自动实现&#xff09;。 卸载工具 HiBitUninstaller: Windows上的软件卸载工具 《魅魔》新DLC《Elysian Fields…

python 利用 opencv 调用摄像头

在进行工程实训的时候&#xff0c;要检测摄像头是否可用 如果想检测摄像头是否能够打开运行&#xff0c;试试运行下面这个文件&#xff0c;这个文件就是简单的一个用opencv捕捉摄像的代码&#xff0c;如果出现运行错误&#xff0c;先改改代码内 cap cv2.VideoCapture(0) 这句&…