本文接着上一篇文章《唯一值校验的实现思路》,在后端实现唯一值校验。用代码实现。
/*** 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 {// 校验通过}}