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

本文介绍了如何在Java项目中通过自定义注解来校验指定字段内容是否在数据库中重复,避免重复代码。文章详细阐述了自定义注解的创建、接口实现、数据库查询工具类以及全局异常处理的设置,并提供了使用示例和原生注解的参考。通过这种方式,可以在实体类和Controller层轻松实现重复性校验。
摘要由CSDN通过智能技术生成

一、前言

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

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

二、实现

基本环境:
  1. javax.validation.validation-api
  2. org.hibernate.hibernate-validator

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

小编的springboot版本为: 2.1.7

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

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

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

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

    Cla
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值