Java 自定义注解 校验指定字段对应数据库内容重复

时间:2024-10-12 07:30:04

一、前言

在项目中,某些情景下我们需要验证编码是否重复,账号是否重复,身份证号是否重复等...
而像验证这类代码如下:
在这里插入图片描述
那么有没有办法可以解决这类似的重复代码量呢?

我们可以通过自定义注解校验的方式去实现,如下 在实体类上面加上自定义的注解 @FieldRepeatValidator(field = "resources", message = "菜单编码重复!") 即可
在这里插入图片描述
下面就先来上代码吧~

二、实现

基本环境:
  1. -api
  2. -validator

在SpringBoot环境中已经自动包含在spring-boot-starter-web中了,如果因为版本导致没有,可去maven仓库搜索手动引入到项目中使用

小编的springboot版本为: 2.1.7

<dependency>
    <groupId></groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
[注:小编是基于MyBatis-Plus的架构下实现的,其他架构略不同,本文实现方式可做参考]
1、自定义注解 @FieldRepeatValidator
// 元注解: 给其他普通的标签进行解释说明 【@Retention、@Documented、@Target、@Inherited、@Repeatable】
@Documented
/**
 * 指明生命周期:
 *       注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
 *       注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。
 *       注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。
 */
@Retention()
/**
 * 指定注解运用的地方:
 *      ElementType.ANNOTATION_TYPE 可以给一个注解进行注解
 *       可以给构造方法进行注解
 *       可以给属性进行注解
 *      ElementType.LOCAL_VARIABLE 可以给局部变量进行注解
 *       可以给方法进行注解
 *       可以给一个包进行注解
 *       可以给一个方法内的参数进行注解
 *       可以给一个类型进行注解,比如类、接口、枚举
 */
@Target({, , })
@Constraint(validatedBy = )
//@Repeatable()(可重复注解同一字段,或者类,java1.8后支持)
public @interface FieldRepeatValidator {

    /**
     * 实体类id字段 - 默认为id (该值可无)
     * @return
     */
    String id() default "id";;

    /**
     * 注解属性 - 对应校验字段
     * @return
     */
    String field();

    /**
     * 默认错误提示信息
     * @return
     */
    String message() default "字段内容重复!";

    Cla