67,550
社区成员




/**
* 合并数据,insert和update,主键可以多个
*
* @param dbset 数据库配置
* @param table 表名
* @param list 数据源
* @param targetMain 表的主键
* @param targetColumn 表的所有列(包含主键)
* @param sourceMain 数据源的主键
* @param sourceColumn 数据源中所有列(包含主键)
* @throws Exception 捕获异常
*/
public static void merge(DatabaseSet dbset, String table, List<Map<String, Object>> list, List<String> targetMain, List<String> targetColumn,
List<String> sourceMain, List<String> sourceColumn) throws Exception {
if (Database.saphana.equals(dbset.database())) {
String sql = SqlUtil.insert(dbset, table, targetColumn).replaceAll("insert into", "upsert") + SqlUtil.joinMain(dbset, targetMain);
sourceColumn.addAll(sourceMain);
BatchUtil.manage(dbset.connect(), sql, list, sourceColumn);
return;
}
List<String> sourceUpdateColumn = new ArrayList<String>();
for (String s : sourceColumn) {
if (!sourceMain.contains(s)) {
sourceUpdateColumn.add(s);
}
}
sourceUpdateColumn.addAll(sourceMain);
String insert = SqlUtil.insert(dbset, table, targetColumn), update = SqlUtil.update(dbset, table, targetColumn, targetMain);
List<Map<String, Object>> inserts = new ArrayList<Map<String, Object>>(),
updates = split(dbset, list, inserts, table, targetMain, sourceMain);
Object[] values = { inserts.size(), updates.size() };
log.info(EntityUtil.toJson(EntityUtil.create(Map.class, new String[] { "insert", "update" }, values, false)));
if (updates.size() > 0) {
manage(dbset.connect(), update, updates, sourceUpdateColumn);
}
if (inserts.size() > 0) {
manage(dbset.connect(), insert, inserts, sourceColumn);
}
}