这段代码的逻辑有问题,应该将 'return this.save(bookType)' 移到 for 循环之外,否则只要列表中存在任何一个图书分类名称与当前图书分类名称不匹配,就会直接执行更新操作,而不是判断所有图书分类名称是否都不匹配后再执行保存或更新操作。正确的逻辑应该是:

  1. 如果当前图书分类有 ID,则表示为修改操作,判断是否存在其他图书分类名称与当前图书分类名称重复,如果有,则抛出异常,如果没有,则执行更新操作。

  2. 如果当前图书分类没有 ID,则表示为新增操作,判断是否存在其他图书分类名称与当前图书分类名称重复,如果有,则抛出异常,如果没有,则执行保存操作。

代码示例:

@Override
public boolean saveOrEdit(TrainBookType bookType) {
    //先拿到所有的图书分类
    List<TrainBookType> list = this.list();
    //遍历比较
    for (TrainBookType trainBookType : list) {
        String ExistingBook = trainBookType.getBookName();
        //当前图书分类名称
        String bookName = bookType.getBookName();
        if (Str.isNotEmpty(bookType.getId())) {
            if (bookName.equals(ExistingBook)) {
                throw new BsException('图书类型' + bookName + '已经存在');
            }
        } else {
            if (bookName.equals(ExistingBook)) {
                throw new BsException('图书类型' + bookName + '已经存在');
            }
        }
    }
    if (Str.isNotEmpty(bookType.getId())) {
        return this.updateById(bookType);
    } else {
        return this.save(bookType);
    }
}

问题分析:

这段代码的主要问题在于,在 for 循环中判断到 bookType.getId() 不为空时,就执行了 save 操作,而没有判断完所有图书分类名称是否都与当前图书分类名称不匹配,导致逻辑错误。

解决方案:

正确的做法应该是先遍历完所有图书分类,判断是否存在其他图书分类名称与当前图书分类名称重复,如果重复则抛出异常,否则根据 bookType.getId() 是否为空,执行保存或更新操作。

Java 代码审查:SaveOrEdit 方法逻辑错误分析

原文地址: https://www.cveoy.top/t/topic/mGCj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录