hibernate批量删除与更新

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值