我看了下插入可以通过fastInsert进行批量快速插入,想问下有没有批量快速更新的方法和自动识别插入和更新,进行批量操作的方法
可能我没有描述清楚 ,主要是list中的数据,在目标中可能存在 ,可能不存在 ,不存在 进行插入,存在 进行更新,我现在想的办法 是循环,进行目标库查询,如果存在 加到存在的列表中,不存在 在加到不存在 的列表中,循环结束后,进行2次批量操作,一次更新,一次插入。不知道有没有现成,或更好的,快速的方法,主要针对 程序运行速度 快,主要也是数据量比较大,每张表有差不多一亿条数据 ,几十张表,上百个节点,相互间都有这种数据操作,现在循环这么弄速度 有点慢
想用mysql的insert into on duplicate key update ?? http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html
把自定义SQL封装一下好了
这是我现在的实现,但感觉速度 太慢,代码也多,有没有好办法,让运行速度更快,代码更少
public void saveOrUpdate(List list) {
List updateRecords = new ArrayList();
List insertRecords = new ArrayList();
for (Record record : list) {
String targetPrimaryKey = getProperties().getString("targetPrimaryKey");
String sourcePrimaryKey = getProperties().getString("sourcePrimaryKey");
Record targetRecord = getDao().fetch(targetPrimaryKey, Cnd.where(sourcePrimaryKey, "=", record.get(sourcePrimaryKey)));
if (targetRecord != null) {
updateRecords.add(record);
} else {
insertRecords.add(record);
}
}
updateBatch(updateRecords);
insertBatch(insertRecords);
}
public void updateBatch(List<Record> list) {
String targetTableCode = getProperties().getString("targetTableCode");
String sourcePrimaryKey = getProperties().getString("sourcePrimaryKey");
for (Record record : list) {
getDao().update(targetTableCode, Chain.from(record), Cnd.where(sourcePrimaryKey, "=", record.get("sourcePrimaryKey")));
}
}
public void insertBatch(List<Record> list) {
String targetTableCode = getProperties().getString("targetTableCode");
list.get(0).put(".table", targetTableCode);
getDao().fastInsert(list);
}
@wendal 你好,