在我们进行开发中,有一个很常见的功能就是,我们要实现一张数据表中一个字段的唯一性。这个功能是很常见的,但是比较容易出错。主要是在修改的时候没有考虑到字段已经存在的问题。
假如,现在有一张数据表,里面有一个sole_code这个字段。我们要实现的是,在这张表中这个字段是唯一的。那么我们怎样实现
比较容易想到的一点是,我们在每次数据插入的时候。根据这个字段去数据库中查询。如果能查到数据,就表明这个字段已经存在了。我们就不能让这条数据就行插入了
如下所示:
Integer count= employeesRolesQueryExe.getBySolecode(employeesRolesCmd.getSoleCode());if(count>0){throw new ResultException(501,"角色编码已存在,请重新输入");}
<select id="getBySolecode" resultType="java.lang.Integer">
select count(*) from employees_roleswhere is_delete=0 and sole_code = #{soleCode,jdbcType=VARCHAR}</select>
这个是我们比较容易想到的,那么我们修改的时候呢;
我们可以分为两步来操作。
我们修改数据一般是根据数据额度ID来进行数据的修改。
那么这时,我们可以把修改操作分为两步。
1、原编码值没有改变
当原编码值没有改变时,这就是一次普通的修改,我们直接执行SQL语句就好了。那么我们怎样判断原编码值有没有改变呢,我们可以根据ID来查询数据库中的数据信息与我们要修改数据信息进行比较
EmployeesRolesVo employeesRolesVo= employeesRolesQueryExe.getById(employeesRolesCmd.getId());
//没有修改唯一代码if(Objects.equals(employeesRolesVo.getSoleCode(),employeesRolesCmd.getSoleCode())){employeesRolesDomain.updateEmployeesRolesInfo(EmployeesRolesAssembler.toEntity(employeesRolesCmd));
}else{
// 修改唯一代码,需要判断唯一代码是否重复Integer count = employeesRolesQueryExe.getBySolecode(employeesRolesCmd.getSoleCode());
if(count>0){throw new ResultException(501,"唯一代码已存在");
}else{employeesRolesDomain.updateEmployeesRolesInfo(EmployeesRolesAssembler.toEntity(employeesRolesCmd));
}}
2、原编码值已经改变
当原编码已经改变时,我们就又需要向新增一条数据一样。我们要根据这个编码值去数据库中进行查询,如果能查询到,就说明编码值已经存在,这边数据就不能修改。如果不能查询到,那么就说明这边数据可以正常修改
EmployeesRolesVo employeesRolesVo= employeesRolesQueryExe.getById(employeesRolesCmd.getId());
//没有修改唯一代码if(Objects.equals(employeesRolesVo.getSoleCode(),employeesRolesCmd.getSoleCode())){employeesRolesDomain.updateEmployeesRolesInfo(EmployeesRolesAssembler.toEntity(employeesRolesCmd));
}else{
// 修改唯一代码,需要判断唯一代码是否重复Integer count = employeesRolesQueryExe.getBySolecode(employeesRolesCmd.getSoleCode());
if(count>0){throw new ResultException(501,"唯一代码已存在");
}else{employeesRolesDomain.updateEmployeesRolesInfo(EmployeesRolesAssembler.toEntity(employeesRolesCmd));
}}