excel批量匯入初始化資料功能注意事項

2021-10-05 17:28:40 字數 2008 閱讀 8651

最近乙個黨建專案(某房管局,其實專案又分黨建、人事、oa三個子系統,2023年底就已經開發完成黨建、人事系統,疫情原因而且公司又在武漢所有現在還在開發)中開發了乙個批量初始化資料的功能。

功能需求簡述一下:

根據excel資料批量生成使用者、使用者角色關聯、黨員、黨支委班子、單位員工、幹部六張表記錄,同時將匯入失敗記錄的原因返回。

下面就是功能開發過程啦:

1.使用map作為臨時緩衝物件,先查詢已有資料以備後面大量的資料校驗。

2.迴圈進行資料校驗並將符合的資料存入list中儲存以及入庫

3.手動開啟事務並提交或者回滾,保證每一條excel生成的六條表記錄操作處於同乙個事務。

map臨時緩衝物件

private mappartyrolemap;

private mappersonnelrolemap;

private mapoamap;

private mapusermap;

private maporgmap;

private mapunitmap;

private map***map;

private mapbooleanmap;

private mapbooleanmap2;

private mapnationmap;

private string leader = "領導";

private string staff = "員工";

private mapdutytypemap;

private mapedubackmap;

private mapdegressmap;

部分map臨時緩衝物件資料獲取

public maprolemap(integer type));

return rolemap;

}public mapusermap());

return usermap;

}

非資料庫資料初始化

@postconstruct

public void init()

資料物件,使用者校驗通過的資料儲存,後面根據每一條入庫資料需要直接取資料

/**

* 初始化使用者資料

*/@data

public class authexcelmodel

失敗記錄物件

@data

@apimodel(value = "excel初始化資料失敗物件")

public class authexcelresult

下面就是部分的資料校驗了,因為excel表一共有38列資料,所有這快的校驗**非常多,就不贅述了

// **號碼

cell cell = row.getcell(7);

if (cell != null)else

}}else

最後的入庫操作

modellist.foreach(model -> 

if (userroles.size() > 0)

// 事務提交

datasourcetransactionmanager.commit(transactionstatus);

}catch (exception e)

});

下面是匯入失敗的結果展示

成功的資料就正常入庫了。

這個功能的注意事項就是:

1.excel匯入對cell設定下type防止number型別與string型別混淆,如果有時間的是直接只用poi中的getdatecellvalue()方法

2.建立臨時緩衝物件避免多次查詢資料庫進行校驗

3.手動事務提交保證每一條excel資料處於同乙個事務

4.做好匯入失敗記錄、原因的儲存,有問題不可怕,重要的是找出問題在哪。

資料初始化

資料初始化的面試題 a 乙個類的初始化過程 b 子父類的構造執行過程 c 分層初始化 看程式寫結果 a 成員變數的問題 int x 10 成員變數是基本型別 student s new student 成員變數是引用型別 b 乙個類的初始化過程 先父後子,先靜後非靜 成員變數的初始化 預設初始化 顯...

使用Excel初始化mysql資料庫

讀取excel表的內容然後寫入資料庫 import xlrd,pymysql 資料庫配置 host localhost localhost 本地資料庫 user root 使用者名稱 password 123456 密碼 database test database 資料庫名稱 charset ut...

Excel批量匯入資料庫

在上個系統中需要用到excel整體匯入的功能整體的核心思路如下 1 首先將需要匯入的excel上傳至伺服器 2 為了避免檔名重複,重新命名上傳的excel檔案 3 將上傳的excel檔案讀入datatable中 4 將datatable讀入資料庫中 實現起來還是比較簡單的,核心 如下 介面需要乙個f...