在線教育平臺,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.pswp.cn/diannao/40140.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40140.shtml
英文地址,請注明出處:http://en.pswp.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) 這句&…