前台传来的新数据与数据库中的旧数据比较更新算法

工作中遇到一个很小的功能,发现写好还有点难度,经过一晚上的思考,把成果记录下。

问题:

数据库中保存了一些数据,前台更新操作传来新的数据。如何比较差异,进行更新。如:

前台传来1,2,3,数据库中有3,5。则需要在数据库中增加1,2;在数据库中删除5;原有数据3不变。

解决方法一:

先把数据库中原的数据全部清空,然后把前台的数据全部执行插入。

这种方法简单,很容易理解,以及判断及正确性。缺点是如果原数据库数据较多,则重复删除后增加,则效率不高。

解决方法二:

查询原数据库中的数据,做为待删除的列表。

遍历前台传来的数据,对每一个在上边待删除列表中查询,如果存在,则说明此条数据要在数据库中保留。则从待删除列表中移除。若不存在,则说明需要在数据库中增加一条数据,放到一个新建列表中。

完成遍历后一次性删除待删除列表中的数据,插入新建列表中的数据。


List<AppSystem> appSystem_deleteList = appSystemDao.getByAppkey(app
		.getAppkey());
List<AppSystem> appSystem_addList = new ArrayList<AppSystem>();
if (sysStr != null && !"".equals(sysStr)) {
	// 组成hashmap只为加速查询
	Map<String, AppSystem> appSystem_searchMap = new HashMap<String, AppSystem>();
	for (AppSystem as : appSystem_deleteList) {
		appSystem_searchMap.put(as.getSystemid().toString(), as);
	}
	// 依次将前台传来的新值进行循环检查
	String[] systemIds = sysStr.split(",");
	for (String systemId : systemIds) {
		if (appSystem_searchMap.containsKey(systemId)) {
			// 如果匹配到,则说明仍然需要,则从删除列表去去除
			appSystem_deleteList.remove(appSystem_searchMap
					.get(systemId));
		} else {
			// 未匹配到,则说明需要增加
			appSystem_addList.add(new AppSystem(app.getAppkey(), Long
					.parseLong(systemId)));
		}
	}
}
appSystemDao.batchAdd(appSystem_addList);
appSystemDao.batchDelete(appSystem_deleteList);



转载于:https://my.oschina.net/jasonli0102/blog/515798

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值