如果你有代表數據的地圖 - 特別是來自非數據庫源(文件,LDAP查詢) - 您可以使用地圖爲您的數據的模型。用戶的
列表
List<Map<String, Object>> users = new ArrayList<Map<String, Object>>(25);
實例映射條目 - 可能來自遍歷文件,或一些其他數據源:
Map<String, Object> user1 = new HashMap<String, Object>();
user1.put("cn", "user1");
user1.put("mail", "[email protected]");
Map<String, Object> user2 = new HashMap<String, Object>();
user2.put("cn", "user2");
user2.put("mail", "[email protected]");
現在NamedJdbcTemplate可以輕鬆地設置您的SQL綁定值 - 我發現它特別有用,當批處理大量的數據從非db數據庫的數據源,我將使用映射爲數據結構。
SqlParameterSource[] batch = new SqlParameterSource[nyssisUsers.size()];
users.eachWithIndex { ldapEntry, index ->
MapSqlParameterSource mapSqlParameterSource = new MapSqlParameterSource(ldapEntry);
batch[index] = mapSqlParameterSource
}
namedParameterJdbcTemplate.batchUpdate(SAVE_USER_SQL, batch);
總結: 使用地圖作爲數據結構來表示在文件中的線,另一個數據庫源,一次性ETL操作,從LDAP等的讀出......是非常有用的。由於Map已經有了鍵,所以想要在SQL模板中使用這些鍵是有意義的。對於上面的例子,這可以反過來是一個簡單的插入,合併或更新SQL語句或一個匿名的PL/SQL代碼塊。無論你需要什麼,你正在處理。
SAVE_USER_SQL可能是因爲參與爲:
private static final String SAVE_USER_SQL = '''
DECLARE
P_CN VARCHAR2 (100);
P_MAIL VARCHAR2 (75);
P_GIVENNAME VARCHAR2 (255);
P_SN VARCHAR2 (255);
P_TITLE VARCHAR2 (75);
P_O VARCHAR2 (75);
BEGIN
P_CN := trim(lower(:cn));
P_MAIL := trim(lower(:mail));
P_GIVENNAME := initCap(:givenName);
P_SN := initCap(:sn);
P_TITLE := upperCase(:title);
P_O := upperCase(:o);
USERS_PKG.SAVE (P_CN,
P_MAIL,
P_GIVENNAME,
P_SN,
P_TITLE,
P_O);
END;
'''
考慮我怎麼回答正確,你能標記檢查? –