hibernate批量删除与更新

来源:互联网 发布:淘宝店铺刷单 编辑:程序博客网 时间:2024/05/21 06:13
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            第二个:1103.实际上当需要进行批量更新与删除时,利用JDBC的批量更新与删除,性能会最好.    参考:http://blog.sina.com.cn/s/blog_4550f3ca0101jhr9.html            http://blog.csdn.net/lzwglory/article/details/17258201
0 0