天天看點

線上問題回報子產品實戰(十八):實作excel台賬檔案記錄批量導入功能

👨‍🎓作者:bug菌

✏️部落格:​​CSDN​​​、​​掘金​​等

💌公衆号:​​猿圈奇妙屋​​

🚫特别聲明:原創不易,轉載請附上原文出處連結和本文聲明,謝謝配合。

🙏版權聲明:文章裡可能部分文字或者圖檔來源于網際網路或者百度百科,如有侵權請聯系bug菌處理。

一、概述🔥

        時間猶如白駒過隙,一轉眼已是六月中旬,聯考也告一段落,曾憶起自己當年這個時候已是放飛自我,整天到處約同學戲耍,然而,時過境遷,我以一名社會人的身份坐在辦公室,懷揣着當時的心情一起為你們祈禱,能在這場無硝煙的戰場上一舉成名,金榜題名,寒窗苦讀十二載,不就為了這一次,希望聯考結果如你所願,而我卻隻能站在你們的前面,以回憶做酒,來祭奠我那逝去的青春。作罷作罷!咱們說正事兒。

       接下來的這幾期,bug菌想跟大家分享一下自己昨天剛接到一個臨時的需求,熱乎着呢,想分享一下自己是如何面對臨時需求并制定整個開發周期,其中包括從梳理業務到建立業務表再到實作業務邏輯形成閉環再到與前端對接,其中會穿插一些業務拓展及功能性拓展,這一條龍流程線上與大家一起見證,分享給剛入門的小夥伴,希望對你們有所幫助。

環境說明:idea2019.3 + springboot2.3.1.REALSE + mybati-plus3.2.0 + mysql5.6 + jdk1.8

       若小夥伴們在批閱文章的過程中覺得文章對您有一絲絲幫助,還請别吝啬您手裡的贊呀,大膽的把文章點亮👍吧,您的點贊三連(收藏⭐️+關注👨‍🎓+留言📃)就是對bug菌我創作道路上最好的鼓勵與支援😘。時光不棄🏃🏻‍♀️,創作不停💕,加油☘️ 

二、正文🔥

        由于上一期我給大家示範了如何從伺服器下載下傳excel模闆檔案,你們就可能猜到了,會有此期業務場景的誕生,由于考慮前期問題及需求疊代比較多,借此就提出了需要滿足使用者能夠通過excel檔案導入問題資料,那麼,既然要滿足該需求,第一點就是需要按我們所給的台賬子產品來填寫,唯有這樣,我們才能通過代碼方式來讀取excel檔案資料,進而将記錄儲存入庫即可。

        該場景在現實中也是很常見的一種,是以對于大家而言,也是司空見慣,借此,這期就跟大家一起聊聊如何實作的事兒吧。

三、如何代碼實作excel導入功能🔥

0️⃣依賴引入

        對于excel的導入導出功能,我們這裡用到的是easypoi的開源元件,也推薦大家使用。簡單介紹一下,easyPoi是一種專門用于做poi的工具集,使用起來簡單且易上手,而且它提供了很多簡單的注解和模闆語言(熟悉的表達式文法)來完成以前poi複雜的寫法。

        so,隻需要在你們的pom依賴配置檔案中加上如下依賴配置,你們就能使用它啦。

<!--easypoi依賴,excel導入導出-->
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-spring-boot-starter</artifactId>
            <version>4.3.0</version>
        </dependency>      

1️⃣定義Controller請求

        由于excel檔案導入,即我們隻需要開個口子将使用者上傳的excel接收即可。是以我們對于檔案類的處理統一都是用MultipartFile類來接收即可。

/**
     * excel批量導入問題回報
     */
    @GetMapping("/import")
    @ApiOperation(value = "excel批量導入問題回報", notes = "excel批量導入問題回報")
    public ResultResponse<Boolean> importUsers(@ApiParam("excel檔案") {
        return new ResultResponse<>(userQuestionsService.importQuestions(file));
    }      

2️⃣定義接口方法importQuestions()

        對于該接口,我們也是隻需要傳回一個boolean值即可。因為最後執行結果就是記錄的批量寫入,傳回結果就是一個布爾值。

/**
     * excel批量導入問題回報
     */
    Boolean importQuestions(MultipartFile file);      

3️⃣實作方法importQuestions()

        想要實作該方法,我們還要定義一個導入pojo,它是對應于你excel檔案中的列名,底層如何實作的你們可以去看看,一一對應是有先後順序的,這裡我給大家做個示例,具體如何定義請看如下樣例,這也是我整期内容所用到的導入類。

ImportQuestions.java

@Data
public class ImportQuestions implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * @Excel 作用在一個filed上面,對列的描述
     * @param name 列名
     * @param
    @Excel(name = "姓名", orderNum = "0",width = 10.0)
    private String creatorName;

    @Excel(name = "域賬号", orderNum = "1",width = 10.0)
    private String creatorAccountId;

    @Excel(name = "部門名稱", orderNum = "2",width = 5.0)
    private String creatorDeptName;

    @Excel(name = "回報問題類型", orderNum = "3",width = 30.0)
    private String questionType;

    @Excel(name = "回報問題詳情", orderNum = "4",width = 20.0)
    private String questionContent;

    @Excel(name = "問題所在頁面", orderNum = "4",width = 20.0)
    private      

不會定義的你們跟着我給出的excel模闆檔案來寫,就能知道它是如何進行确定字段類型,及@Excel注解中的屬性了。

        定義好了導入pojo,接下來就是要實作如何從excel檔案中讀取資料且insert入庫了。這裡分為兩步,第一步擷取excel檔案資料,第二步就是将擷取到的資料進行儲存入庫。

接下來我先給大家示範第一步的實作代碼。

/**
     * excel批量導入問題回報
     */
    @Override
    public Boolean importQuestions(MultipartFile file) {

        ImportParams importParams = new ImportParams();
        //标題行設定為1行,預設是0,可以不設定;依實際情況設定。
        importParams.setTitleRows(1);
        // 表頭設定為1行
        importParams.setHeadRows(1);
        // 第幾個sheet頁
        importParams.setStartSheetIndex(0);
        try {
            List<ImportQuestions> questions = ExcelImportUtil.importExcel(file.getInputStream(), ImportQuestions.class, importParams);
            //批量插入
            boolean isSuccess = this.saveQuestions(questions);
            return isSuccess;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }      

如上寫法,你們就按照我寫的邏輯直接用就可以了。對于其中的savaQuestions()方法,也就是我所提到的第二步,實作邏輯有二,第一将pojo導入類轉成Entity實體,第二将執行saveBatch()批量插入方法,最終目的是将excel中的所有記錄成功儲存入庫。

/**
     * 批量儲存問題回報記錄
     *
     * @param
    boolean saveQuestions(List<ImportQuestions> questions) {
        //存放UserQuestionsEntity
        List<UserQuestionsEntity> questionsEntityList = new ArrayList<>();

        //轉成UserQuestionsEntity實體
        for (ImportQuestions question : questions) {
            //驗空
            if (question != null) {
                UserQuestionsEntity questionsEntity = new UserQuestionsEntity(question);

                questionsEntityList.add(questionsEntity);
            }
        }
        //批量插入
        return this.saveBatch(questionsEntityList);
    }      

如上代碼就已經實作了從上傳excel到讀取excel記錄再到批量插入記錄入庫幾步,接下來就是要測試這個接口是否能完美運作通過了。 

4️⃣接口測試

        我們先來通過下載下傳好的台賬模闆,給随便造點資料進去,接着我們就來測試我們上面寫好的excel導入接口,看看是否滿足業務要求?

線上問題回報子產品實戰(十八):實作excel台賬檔案記錄批量導入功能

如上我是造了三條資料,我們還是通過postman來進行接口測試,将剛建立好資料的excel檔案進行添加,然後點選【send】模拟接口請求。

具體傳參及步驟示範如下:

線上問題回報子產品實戰(十八):實作excel台賬檔案記錄批量導入功能

我們可以看到請求成功了,傳回了code200.而且打開控制台也可以檢視控制台實際SQL執行語句,具體如下:

線上問題回報子產品實戰(十八):實作excel台賬檔案記錄批量導入功能

最後我們再來看下資料庫剛寫入的資料,給大家校驗一波,是否與excel内容一緻?

線上問題回報子產品實戰(十八):實作excel台賬檔案記錄批量導入功能

寫條sql按時間倒序排序查詢一下,從庫裡也準确查出了我們剛導入的那部分資料,這下你們總該可以放心copy了吧。

        說實在的,我對自己要求還是很高的,一般如果是對于有功能問題或邏輯問題的代碼,我都不會拿出來示範,以免誤人子弟,既然要教學,那就要做到起碼代碼運作正常,且符合當時業務場景要求,否則就不寫不分享。 

5️⃣總結

        對于越簡單的邏輯接口而言,我們都要百分百用心寫。

 ... ...

        好啦,以上就是這期的所有内容啦,你們學廢了麼?如果對你有所幫助,還請不要忘記給bug菌[三連支援]喲。如果想獲得更多的學習資源或者想和更多的技術愛好者一起交流,可以關注我的公衆号『​​猿圈奇妙屋​​』,背景回複關鍵詞領取學習資料、大廠面經、面試模闆等海量資源,就等你來拿。

四、往期熱文推薦🔥

        對于問題回報子產品實戰開發,我完整的梳理了每一期的教學及連結位址,僅供參考:希望能對你們有所幫助。

  • ​​線上問題回報子產品實戰(一):梳理業務需求并建立資料庫表​​
  • ​​線上問題回報子產品實戰(二):封裝代碼自動生成類檔案器​​
  • ​​線上問題回報子產品實戰(三):自動生成所有Controller、Service、Mapper等檔案​​
  • ​​線上問題回報子產品實戰(四):封裝通用字段類​​
  • ​​線上問題回報子產品實戰(五):實作對通用字段内容自動填充功能​​
  • ​​線上問題回報子產品實戰(六):接口文檔定義​​
  • ​​線上問題回報子產品實戰(七):安裝部署swagger2​​
  • ​​線上問題回報子產品實戰(八):實作圖檔上傳功能-上篇​​
  • ​​線上問題回報子產品實戰(九):實作圖檔上傳功能-下篇​​
  • ​​線上問題回報子產品實戰(十):實作圖檔預覽功能​​
  • ​​線上問題回報子產品實戰(十一):實作圖檔下載下傳功能​​
  • ​​線上問題回報子產品實戰(十二):實作圖檔删除功能​​
  • ​​線上問題回報子產品實戰(十三):實作多參數分頁查詢清單​​
  • ​​線上問題回報子產品實戰(十四):實作線上答疑功能​​
  • ​​線上問題回報子產品實戰(十五):實作線上更新回報狀态功能​​
  • ​​線上問題回報子產品實戰(十六):實作查詳情功能​​
  • ​​線上問題回報子產品實戰(十七):實作excel模闆線上下載下傳功能​​
  • ​​線上問題回報子產品實戰(十八):實作excel台賬檔案記錄批量導入功能​​
  • ​​線上問題回報子產品實戰(十九):實作資料批量導出到excel檔案中功能​​
  • ​​線上問題回報子產品實戰(二十):實作檔案批量導出到zip壓縮包中功能​​
  • ​​線上問題回報子產品實戰(二十一):完結篇​​

        如上是整整二十期内容,每一期都是幹貨,對于一個子產品的開發,如何一點一滴打造并測試部署上線,我再說一遍,這不是演習,是實戰!是實戰!是實戰!

        若你們覺得隻是需要了解其中某個知識點或者業務的話,也不反對,你就選擇其中的幾期進行學習就好,反正都已經完結啦;我隻希望你們能有所收獲,有所成長,也就不枉我苦心每天下班後給大家總結更新。

五、文末🔥

​​《springboot零基礎入門教學》​​,都是我一手打下的江山,持續更新中,希望能幫助到更多小夥伴們。

我是bug菌,一名想走👣出大山改變命運的程式猿。接下來的路還很長,都等待着我們去突破、去挑戰。來吧,小夥伴們,我們一起加油!未來皆可期,fighting!

        最後送大家兩句我很喜歡的話,與諸君共勉!

☘️做你想做的人,沒有時間限制,隻要願意,什麼時候都可以開始。

🍀你能從現在開始改變,也可以一成不變;這件事,沒有規矩可言,你可以活出最精彩的自己。

線上問題回報子產品實戰(十八):實作excel台賬檔案記錄批量導入功能

💌如果文章對您有所幫助,就請留下您的贊吧!(#^.^#);

💝如果喜歡bug菌分享的文章,就請給bug菌點個關注吧!(๑′ᴗ‵๑)づ╭❤~;

💗如果對文章有任何疑問,還請文末留言或者加群吧【QQ交流群:708072830】;