生成一万条数据,判断数据库是否重复

165 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

//每次生成卡的数量
public static final Integer GENERATE_CARD_NUMBER = 50;

for (int n = 0; n < cardNums; n = n + 50) {
    if (cardNums - n < CommonConstant.GENERATE_CARD_NUMBER) {
        saveCardsless(cardNums - n);
    } else {
        List<ZzActivateCard> zzActivateCards = new ArrayList<>();
        for (int m = 0; m < 50; m++) {
            ZzActivateCard zzActivateCard = new ZzActivateCard();
            //UUID获取后14位字符串
            String cartNumber = CartNumberUtil.getCartNumber();
            //设置卡号
            zzActivateCard.setCardNumber(cartNumber);
            //不使用
            zzActivateCard.setIsEnabled(ZzDepartment.IsEnabled.fou.getId());
            zzActivateCards.add(zzActivateCard);
        }
        //生成卡片
        saveCards(zzActivateCards);
    }
}


//小于50的情况下
public void saveCardsless(Integer cardNumber) {
    List<ZzActivateCard> zzActivateCards = new ArrayList<>();
    for (int i = 0; i < cardNumber; i++) {
        ZzActivateCard zzActivateCard = new ZzActivateCard();
        //UUID获取后16位字符串
        String cartNumber = CartNumberUtil.getCartNumber();
        //设置卡号
        zzActivateCard.setCardNumber(cartNumber);
        //不使用
        zzActivateCard.setIsEnabled(ZzDepartment.IsEnabled.fou.getId());
        zzActivateCards.add(zzActivateCard);
    }
    //生成卡片
    saveCards(zzActivateCards);
}

    //添加卡片
    public void saveCards(List<ZzActivateCard> zzActivateCards) {
        List<String> cardNumbers = zzActivateCards.stream().map(e -> e.getCardNumber()).collect(Collectors.toList());
        List<ZzActivateCard> zzActivateCards1 = zzActivateCardService.selectByCardNumbers(cardNumbers);
        if (CollectionUtils.isNotEmpty(zzActivateCards1)) {
            //删除重复卡号的元素
            for (int n = 0; n < zzActivateCards.size(); n++) {
                for (int m = 0; m < zzActivateCards1.size(); m++) {
                    if (zzActivateCards.get(n).getCardNumber().equals(zzActivateCards1.get(m).getCardNumber())) {
                        zzActivateCards.remove(n);
                    }
                }
            }

            List<ZzActivateCard> zzActivateCardsDate = generateCards(zzActivateCards1);
            zzActivateCards.addAll(zzActivateCardsDate);
        }
//        List<ZzActivateCard> zzActivateCardsDate = generateCards(zzActivateCards1);
//        zzActivateCards.addAll(zzActivateCardsDate);
        zzActivateCardService.saveBatch(zzActivateCards);
    }


//递归
public List<ZzActivateCard> generateCards(List<ZzActivateCard> zzActivateCards1) {
    List<ZzActivateCard> zzActivateCards = new ArrayList<>();
    for (int i = 0; i < zzActivateCards1.size(); i++) {
        ZzActivateCard zzActivateCard = new ZzActivateCard();
        //UUID获取后16位字符串
        String cartNumber = CartNumberUtil.getCartNumber();
        //设置卡号
        zzActivateCard.setCardNumber(cartNumber);
        //不使用
        zzActivateCard.setIsEnabled(ZzDepartment.IsEnabled.fou.getId());
        zzActivateCards.add(zzActivateCard);
    }

    List<String> cardNumbers = zzActivateCards.stream().map(e -> e.getCardNumber()).collect(Collectors.toList());
    List<ZzActivateCard> zzActivateCardsDate = zzActivateCardService.selectByCardNumbers(cardNumbers);
    if (CollectionUtils.isNotEmpty(zzActivateCardsDate)) {
        generateCards(zzActivateCards1);
    }
    return zzActivateCards;
}


public static String getCartNumber() {
    StringBuilder prefix = new StringBuilder("QZYL");
    return prefix.append(UUID.randomUUID().toString().replace("-", "").substring(0,14).toUpperCase()).toString();
}

如果生成一万条数据,每次需要到数据库比对生成的数据是否有重复。如果直接比对,会把数据库玩死,所以我们可以for循环,每次循环生成50次,并且比对50次。