springBoot 数据库表新增修改通用判断字段数据重复
时间: 2023-12-08 09:03:31 浏览: 189
在SpringBoot中,可以使用Hibernate Validator来进行数据校验。如果需要对数据库表新增、修改时的通用字段进行重复性校验,可以使用自定义注解和校验器来实现。
1. 自定义注解
首先,我们需要自定义一个注解,用来标记需要进行重复性校验的字段。比如,我们可以创建一个名为@Unique的注解,用来标记唯一性字段。
```
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = UniqueValidator.class)
public @interface Unique {
String message() default "该字段已存在";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String value() default "";
}
```
其中,@Target注解用来指定注解的使用范围,这里我们指定为字段;@Retention注解用来指定注解的保留策略,这里我们指定为运行时保留;@Constraint注解用来指定注解的校验器,这里我们指定为UniqueValidator。
2. 自定义校验器
接下来,我们需要自定义一个校验器,用来对标记了@Unique注解的字段进行重复性校验。比如,我们可以创建一个名为UniqueValidator的校验器。
```
public class UniqueValidator implements ConstraintValidator<Unique, Object> {
@Autowired
private JdbcTemplate jdbcTemplate;
private String fieldName;
@Override
public void initialize(Unique constraintAnnotation) {
fieldName = constraintAnnotation.value();
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
if (value == null) {
return true;
}
String sql = "SELECT COUNT(*) FROM table_name WHERE " + fieldName + " = ?";
int count = jdbcTemplate.queryForObject(sql, Integer.class, value);
return count == 0;
}
}
```
其中,@Autowired注解用来注入JdbcTemplate实例,以便进行数据库操作;initialize方法用来初始化校验器,这里我们获取@Unique注解中指定的字段名;isValid方法用来实现具体的校验逻辑,这里我们使用JdbcTemplate查询数据库,判断指定字段的值是否已存在。
3. 使用示例
最后,我们可以在实体类中使用@Unique注解,对需要进行重复性校验的字段进行标记。
```
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Unique(value = "username")
private String username;
private String password;
// ...
}
```
这样,在进行新增或修改操作时,就会自动对标记了@Unique注解的字段进行重复性校验,如果发现重复,则会抛出ConstraintViolationException异常。我们可以在Controller层进行异常处理,返回给前端友好的提示信息。
阅读全文