最近乙個黨建專案(某房管局,其實專案又分黨建、人事、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...