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);
    }
View Code
个人网址 http://threenut.cn/
原文地址:https://www.cnblogs.com/july7/p/14681609.html