spring data jpa之数据增删改查代码优化

Spring data jpa为减少查询数据库次数,先将符合条件的数据查出来,返回的是一个list集合,遍历集合将数据装入map中,根据需要设置key,value,然后判断map是否包含某个key或者value以此判断数据是否在数据库中已经存在。这样减少了访问数据库的次数,减小了服务器压力,将大部分操作放进了内存中进行。   
最后: 一定要记住,除非没有其他方法实现,否则一定不要把增删改查写在for循环里面,数据量一大,其速度可想而知。

以下是我项目中的一个修改方法:

/**
     * @param memberInfoList
     */
    @Override
    public void modify(List<StockMemberInfo> memberInfoList,Unit unit) {
        SimpleSpecificationBuilder<StockShare> builder = new SimpleSpecificationBuilder<>();
        builder.add("unit", SpecificationOperator.Operator.eq.name(), unit.getId());
        List<StockShare> stockShareList = stockShareService.findList(builder.generateSpecification(),null);
        Map<String, StockShare> map = new HashMap<>(16);
        SimpleSpecificationBuilder<StockMemberInfo> builder2 = new SimpleSpecificationBuilder<>();
        builder2.add("unitCode", SpecificationOperator.Operator.likeL.name(), unit.getUnitCode());
        List<StockMemberInfo> stockMemberInfoList = stockMemberInfoService.findList(builder2.generateSpecification(), null);
        Map<String, StockMemberInfo> memberInfoMap = new HashMap<>(16);
        List<StockMemberInfo> list = new ArrayList<>();
        for (StockShare stockShare : stockShareList) {
            map.put(stockShare.getStockCategory().getName(),stockShare);
        }
        for (StockMemberInfo stockMemberInfo : stockMemberInfoList) {
            memberInfoMap.put(stockMemberInfo.getUniqueField(), stockMemberInfo);
        }
        for (StockMemberInfo stockMemberInfo : memberInfoList) {
            if (map.get(stockMemberInfo.getStockShare().getStockCategory().getName()) == null) {
                throw new RuntimeException("你还未进行份额计算");
            }
            String uniqueField = stockMemberInfo.getMemberInfo().getId()+"-"+map.get(stockMemberInfo.getStockShare().getStockCategory().getName()).getId();
            if (memberInfoMap.containsKey(uniqueField)) {
                StockMemberInfo s = memberInfoMap.get(uniqueField);
                s.setStockNum(stockMemberInfo.getStockNum());
                list.add(s);
            }
        }
        stockMemberInfoService.save(list);
    }

猜你喜欢

转载自blog.csdn.net/qq_wzs/article/details/84783517