1.循环执行hql语句:
public RemoveFavoritesResponse remove(RemoveFavoritesRequest request){
Date date = new Date();
long startTime = date.getTime();
String[] codes = request.getValue().split(",");
for(int i=0; i<codes.length; ++i) {
Map<String, Object> params = new HashMap<String, Object>();
String hql = "delete from Favorites where userid=:userid and value=:value";
params.put("userid", request.getUserid());
params.put("value", codes[i]);
if(StringUtils.hasText(request.getAppVersion())) {
hql += " and appVersion=:appVersion";
params.put("appVersion", request.getAppVersion());
}
Query q = em.createQuery(hql);
for(Map.Entry<String, Object> entry: params.entrySet()) {
q.setParameter(entry.getKey(), entry.getValue());
}
q.executeUpdate();
}
long endTime = new Date().getTime();
System.out.println("remove:\n" + (endTime-startTime));
return new RemoveFavoritesResponse(0, "");
}
2.利用hibernate的批量更新API:
public RemoveFavoritesResponse remove1(RemoveFavoritesRequest request){
Date date = new Date();
long startTime = date.getTime();
String[] codes = request.getValue().split(",");
List<String> codeList = Arrays.asList(codes);
Map<String, Object> params = new HashMap<String, Object>();
String hql = "delete from Favorites where userid=:userid and value in :codeList";
params.put("userid", request.getUserid());
params.put("codeList", codeList);
if(StringUtils.hasText(request.getAppVersion())){
hql += " and appVersion=:appVersion";
params.put("appVersion", request.getAppVersion());
}
Query q = em.createQuery(hql);
for(Map.Entry<String, Object> entry : params.entrySet()){
q.setParameter(entry.getKey(), entry.getValue());
}
q.executeUpdate();
long endTime = new Date().getTime();
System.out.println("remove1:\n" + (endTime-startTime));
return new RemoveFavoritesResponse(0, "");
}
当codeList中的元素较少时,两者所耗费时间基本没有差别
但当codeList中的元素较多时,第二个的效率则较高
例如当codeList中有3个元素时,
平均耗费时间:
第一个:94
第二个:110
当codeList中有16个元素时:
平均耗费时间:
第一个:109
第二个:110
3.实际上当需要进行批量更新与删除时,利用JDBC的批量更新与删除,性能会最好.
参考:http://blog.sina.com.cn/s/blog_4550f3ca0101jhr9.html
http://blog.csdn.net/lzwglory/article/details/17258201