唯一值校验的实现思路(续)

发布于:2025-02-12 ⋅ 阅读:(104) ⋅ 点赞:(0)

本文接着上一篇文章《唯一值校验的实现思路》,在后端实现唯一值校验。用代码实现。

/**
     * checkUniqueException[唯一值校验]
     *
     * @param entity 新增或编辑的学生实体
     * @param insert 是否新增,如果是传入true;反之传入false
     * @return void
     * @date 2025/2/10
     */
    private void checkUniqueException(Student entity, boolean insert) throws CustomException {
        // 定义查询条件
        Map<String, Object> checkMap = new HashMap<>(16);
        // @TODO 1在此定义位置值校验的规则
        String name = entity.getName();
        String carNum = entity.getCardNum();
        // 添加空值检查
        if (StringUtils.isEmpty(name) || StringUtils.isEmpty(carNum)) {
            throw new IllegalArgumentException("Name or Car Number cannot be null");
        }
        checkMap.put("name", name);
        checkMap.put("carNum", carNum);
        List<Student> studentList = studentDao.queryAccurate(checkMap);
        final String errMsg = name + "," + carNum + "的信息,不允许重复保存!";
        if (CollectionUtil.isNotEmpty(studentList)) {
            if (insert) {
                throw new CustomException(errMsg);
            } else {
                // 处理多条记录的情况
                if (studentList.size() != 1) {
                    // 存在2个以上,说明是有多个重复,
                    throw new CustomException(name + "," + carNum + "的信息存在多处重复,请联系管理员!");
                }
                checkUpdate(studentList.get(0), entity, name, carNum);
            }
        } else {
            // 校验通过
        }
    }

    /**
     * checkUpdate[编辑的校验方法]
     *
     * @param entityOld 数据库查询出来的实体
     * @param entity      编辑的实体
     * @param name        校验的name字段
     * @param carNum      校验的card字段
     * @return void
     * @date 2025/2/10
     */
    private void checkUpdate(Student entityOld, Student entity, String name, String carNum) throws CustomException {
        if (!Objects.equals(entityOld.getId(), entity.getId())) {
            // 新id和旧id不相等,说明,数据库已经存在了数据。不允许重复保存。
            throw new CustomException(name + "," + carNum + "的信息,不允许重复保存!");
        } else {
            // 校验通过
        }
    }


网站公告

今日签到

点亮在社区的每一天
去签到