java 校验同一张表某个字段值不能重复
例如 一个实体 user 校验name名字不能重复
思路
1.新增:时比较容易做 直接根据传来的参数 查询实体如果不为空 则查询到了重复值
2.修改:修改需要考虑较多
2.1.既然是不重复 必然是必填字段.前端校验即可
2.2.前端传来的参数name 需要和数据库字段name比较. 数据库查询时需要根据id查询,然后拿数据库
查询取到的name 和 用户输入的name 进行比价. 如果 相等 那么说明用户输入时没有进行更改数据 校验通过 ,
如果不相等说明用户修改时,更改了name 值,那么需要查询修改的值在数据库中是否已经存在,查询条件为
where name = ? 如果没查询到校验通过
案例如下 使用的是 -- mybatisPlus
/** * 修改校验 * @param inspectorOrderEntity * @return */ @Override public QmsInspectorOrderEntity selectOneUpdatePriority(QmsInspectorOrderEntity inspectorOrderEntity) { QmsInspectorOrderEntity entity = new QmsInspectorOrderEntity(); //用户输入 Integer orderNo = inspectorOrderEntity.getOrderNo(); QmsInspectorOrderEntity qmsInspectorOrderEntity = baseMapper.selectById(inspectorOrderEntity); //1.根据id 对比用户输入和数据库查询 顺序号是否相等 if (orderNo.equals(qmsInspectorOrderEntity.getOrderNo())){ //不存在重复顺序号 校验通过 entity.setMarking(0); return entity; } else { // 用户输入和数据库查询不相等 需要做校验 顺序是否存在 if (this.ifExistNumber(inspectorOrderEntity)){ //true 没有查询到 校验通过 entity.setMarking(0); return entity; }else { //建议输入N+1 顺序号已存在 QueryWrapper<QmsInspectorOrderEntity> wrapper1 = new QueryWrapper<>(); wrapper1.orderByDesc("order_no").last("limit 1"); QmsInspectorOrderEntity maxValue = baseMapper.selectOne(wrapper1); entity.setSuggestNumber(maxValue.getOrderNo()+1+""); entity.setOrderNo(qmsInspectorOrderEntity.getOrderNo()); entity.setMarking(1); return entity; } } } /** * 查询 顺序号是否存在? 存在false * @param inspectorOrderEntity 实体 * @return Boolean */ public boolean ifExistNumber(QmsInspectorOrderEntity inspectorOrderEntity){ Integer orderNo = inspectorOrderEntity.getOrderNo(); QueryWrapper<QmsInspectorOrderEntity> wrapper = new QueryWrapper<>(); wrapper.eq("order_no",orderNo); QmsInspectorOrderEntity entity = null; try { entity = baseMapper.selectOne(wrapper); } catch (Exception e) { e.printStackTrace(); } return !ObjectUtils.isNotEmpty(entity); }