hibernate注解校验

1.为什么使用hibernate注解校验?

在没有使用hibernate注解之前,很多参数的校验都是通过在业务代码中用重复的代码做校验的,这样及其的不方便,有了hibernate的注解校验后大大方便的我们的校验过程。

2.使用hibernate

2.1 hibante常用校验注解

 Bean Validation 中内置的 constraint     
@Null   被注释的元素必须为 null     
@NotNull    被注释的元素必须不为 null     
@AssertTrue     被注释的元素必须为 true     
@AssertFalse    被注释的元素必须为 false     
@Min(value)     被注释的元素必须是一个数字,其值必须大于等于指定的最小值     
@Max(value)     被注释的元素必须是一个数字,其值必须小于等于指定的最大值     
@DecimalMin(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值     
@DecimalMax(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值     
@Size(max=, min=)   被注释的元素的大小必须在指定的范围内     
@Digits (integer, fraction)     被注释的元素必须是一个数字,其值必须在可接受的范围内     
@Past   被注释的元素必须是一个过去的日期     
@Future     被注释的元素必须是一个将来的日期     
@Pattern(regex=,flag=)  被注释的元素必须符合指定的正则表达式     
Hibernate Validator 附加的 constraint     
@NotBlank(message =)   验证字符串非null,且长度必须大于0     
@Email  被注释的元素必须是电子邮箱地址     
@Length(min=,max=)  被注释的字符串的大小必须在指定的范围内     
@NotEmpty   被注释的字符串的必须非空     
@Range(min=,max=,message=)  被注释的元素必须在合适的范围内

2.2 依赖jar
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
 </dependency>

2.3 简单使用注解校验
bean中使用hibernate注解
public class Customer {
    @NotBlank
    private  String name;
}

测试是否能校验传入参数时 是否判断name为空


import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Set;

/**
 * author: xl
 * time: 2018/6/15 14:59
 * description:
 **/
public class ValidatorTest {


   public static final Validator validator = Validation.buildDefaultValidatorFactory().getValidator();


    /**
     * 〈注解验证参数〉     *
     * @param obj
     */
    public static <T> String validate(T obj) {
        String msg = "";
        Set<ConstraintViolation<T>> constraintViolations = validator.validate(obj);
        // 抛出检验异常
        if (constraintViolations.size() > 0) {
            msg =constraintViolations.iterator().next().getMessage();
        }
        return msg;
    }



    public static void main(String[] args) {
        Customer customer = new Customer();
        customer.setAge(11);
        customer.setMobile("1581649786");
        String validName = validate(customer);
        System.out.println(validName);

    }

}


2.4 自定义注解校验



import javax.validation.Constraint;
import javax.validation.Payload;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Created by xiaoli on 2018/6/15.
 */
@NotBlank
@Pattern(
        regexp = "^(\\d{15,15}|\\d{18,18}|\\d{17}(\\d|X|x))",
        message = "不符合身份证格式"
)
@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
//可指定校验类,如果不指定校验类则默认当前类
@Constraint(
        validatedBy = {}
)
public @interface Idcard {

    String value()default "43112219871126";

    String regexp() default "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9]+\\.[a-zA-Z]{2,4}";

    String message()default "身份证校验失败";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

}

引用自定义注解
public class Customer {

     private  String name;

     private  int age;

     @Idcard
     private  String idcard;
}

校验自定义注解



import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Set;

/**
 * author: xl
 * time: 2018/6/15 14:59
 * description:
 **/
public class ValidatorTest {


   public static final Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
   


    /**
     * 分组校验和组合校验
     * 不同的业务有不同的参数校验组合
     * @param obj
     * @param groups
     * @param <T>
     */
    public static <T> String validate(T obj,Class ... groups) {
        String msg = "";
        Set<ConstraintViolation<T>> constraintViolations = validator.validate(obj);
        // 抛出检验异常
        if (constraintViolations.size() > 0) {
            msg =constraintViolations.iterator().next().getMessage();
        }
        return msg;
    }


    public static void main(String[] args) {
        Customer customer = new Customer();
        customer.setName("xl");
        customer.setAge(11);
        customer.setMobile("1581649786");
        customer.setIdcard("4311122145845");
        String validIdcard = validate(customer);
        System.out.println(validIdcard);

    }

}
----------------------------------------------------------------------------------------------------------------------

延伸的知识点: 正则表达式注解的定义

提供代码支持: hibernate annotation source code

猜你喜欢

转载自blog.csdn.net/robinsonxiao/article/details/80709001