当前位置: 首页 > 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 {
            // 校验通过
        }
    }

http://www.dtcms.com/a/14334.html

相关文章:

  • 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-运行时方法交换
  • Jmeter+Influxdb+Grafana平台监控性能测试过程
  • STM32F407通过FSMC扩展外部SRAM和NAND FLASH
  • Gitlab中如何进行仓库迁移
  • 游戏应用谷歌后台使用介绍
  • 设计模式Python版 命令模式(上)
  • conda 修复 libstdc++.so.6: version `GLIBCXX_3.4.30‘ not found 简便方法
  • 如何在Servlet容器中使用HttpServletResponse?
  • 【Mybatis】动态 SQL:代码与数据的灵动共舞,奏响数据库查询的华丽乐章
  • day9手机创意软件
  • 小程序canvas2d实现横版全屏和竖版逐字的签名组件(字帖式米字格签名组件)