/**
*合并数据,insert和update,主键可以多个
*
*@paramdbset数据库配置
*@paramtable表名
*@paramlist数据源
*@paramtargetMain表的主键
*@paramtargetColumn表的所有列(包含主键)
*@paramsourceMain数据源的主键
*@paramsourceColumn数据源中所有列(包含主键)
*@throwsException捕获异常
*/
publicstaticvoidmerge(DatabaseSetdbset,Stringtable,List>list,ListtargetMain,ListtargetColumn,
ListsourceMain,ListsourceColumn)throwsException{
if(Database.saphana.equals(dbset.database())){
Stringsql=SqlUtil.insert(dbset,table,targetColumn).replaceAll("insertinto","upsert")+SqlUtil.joinMain(dbset,targetMain);
sourceColumn.addAll(sourceMain);
BatchUtil.manage(dbset.connect(),sql,list,sourceColumn);
return;
}
ListsourceUpdateColumn=newArrayList();
for(Strings:sourceColumn){
if(!sourceMain.contains(s)){
sourceUpdateColumn.add(s);
}
}
sourceUpdateColumn.addAll(sourceMain);
Stringinsert=SqlUtil.insert(dbset,table,targetColumn),update=SqlUtil.update(dbset,table,targetColumn,targetMain);
List>inserts=newArrayList>(),
updates=split(dbset,list,inserts,table,targetMain,sourceMain);
Object[]values={inserts.size(),updates.size()};
log.info(EntityUtil.toJson(EntityUtil.create(Map.class,newString[]{"insert","update"},values,false)));
if(updates.size()>0){
manage(dbset.connect(),update,updates,sourceUpdateColumn);
}
if(inserts.size()>0){
manage(dbset.connect(),insert,inserts,sourceColumn);
}
}
|