当前位置: 首页 > news >正文

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

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

/**
     * 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 {
            // 校验通过
        }
    }

相关文章:

  • Centos7系统安装redis
  • 3.【线性代数】——矩阵乘法和逆矩阵
  • 删除命名空间长时间处于 Terminating 状态的方式
  • react redux用法学习
  • TextWebSocketHandler 和 @ServerEndpoint 各自实现 WebSocket 服务器
  • Deepseek-v3 / Dify api接入飞书机器人go程序
  • 127,【3】 buuctf [NPUCTF2020]ReadlezPHP
  • 云原生AI Agent应用安全防护方案最佳实践(上)
  • 不到一个月,SQLite 3.49.0来了
  • 本地事务简介
  • 【进程与线程】进程之间的通信
  • 16.React学习笔记.React更新机制
  • 【DeepSeek × Postman】请求回复
  • LogicFlow自定义节点:矩形、HTML(vue3)
  • Java 入门核心基础学习 + 开源项目 + 思维导图
  • 深度学习|表示学习|CNN中的Layer Normalization | 25
  • 数据可视化
  • 深度解析策略模式:从理论到企业级实战应用
  • Unity-Mirror网络框架-从入门到精通之Multiple Additive Scenes示例
  • iOS主要知识点梳理回顾-5-运行时方法交换
  • 海关总署统计分析司司长:4月进出口增速较一季度加快4.3个百分点
  • 国家税务总局泰安市税务局:山东泰山啤酒公司欠税超536万元
  • 昆明阳宗海风景名胜区19口井违规抽取地热水,整改后用自来水代替温泉
  • 谜语的强制力:弗洛伊德与俄狄浦斯
  • 两部门发布外汇领域行刑反向衔接案例,织密金融安全“防护网”
  • 吴清:推动公募基金高质量发展的行动方案今天将会发布