首页 > 其他分享 >Hibernate数据校验简介

Hibernate数据校验简介

时间:2023-06-13 09:23:27浏览次数:37  
标签:Hibernate BigDecimal int 简介 校验 private 注释 value

Hibernate数据校验简介

我们在业务中经常会遇到参数校验问题,比如前端参数校验、Kafka消息参数校验等,如果业务逻辑比较复杂,各种实体比较多的时候,我们通过代码对这些数据

一一校验,会出现大量的重复代码以及和主要业务无关的逻辑。Spring MVC提供了参数校验机制,但是其底层还是通过Hibernate进行数据校验,所以有必要去了

解一下Hibernate数据校验和JSR数据校验规范。

1、JSR数据校验规范

Java官方先后发布了JSR303与JSR349提出了数据合法性校验提供的标准框架:BeanValidator,BeanValidator框架中,用户通过在Bean的属性上标注类似于

@NotNull、@Max等标准的注解指定校验规则,并通过标准的验证接口对Bean进行验证。

2、JSR注解列表

JSR标准中的数据校验注解如下所示:

注解名 注解数据类型 注解作用 示例
AssertFalse boolean/Boolean 被注释的元素必须为False @AssertFalse private boolean success;
AssertTrue boolean/Boolean 被注释的元素必须为True @AssertTrue private boolean success;
DecimalMax BigDecimal/BigInteger/CharSequence/byte/short/int/long及其包装类 被注释的值应该小于等于指定的最大值 @DecimalMax("10") BigDecimal value;
DecimalMin BigDecimal/BigInteger/CharSequence/byte/short/int/long及其包装类 被注释的值应该大于等于指定的最小值 @DecimalMin("10") private BigDecimal value;
Digits BigDecimal/BigInteger/CharSequence/byte/short/int/long及其包装类 integer指定整数部分最大位数,fraction指定小数部分最大位数 @Digits(integer = 10,fraction = 4) private BigDecimal value;
Email CharSequence 字符串为合法的邮箱格式 @Email private String email;
Future java中的各种日期类型 指定日期应该在当期日期之后 @Future private LocalDateTime future;
FutureOrPresent java中的各种日期类型 指定日期应该为当期日期或当期日期之后 @FutureOrPresent private LocalDateTime futureOrPresent;
Max BigDecimal/BigInteger/byte/short/int/long及包装类 被注释的值应该小于等于指定的最大值 @Max("10") private BigDecimal value;
Min BigDecimal/BigInteger/byte/short/int/long及包装类 被注释的值应该大于等于指定的最小值 @Min("10") private BigDecimal value;
Negative BigDecimal/BigInteger/byte/short/int/long/float/double及包装类 被注释的值应该是负数 @Negative private BigDecimal value;
NegativeOrZero BigDecimal/BigInteger/byte/short/int/long/float/double及包装类 被注释的值应该是0或者负数 @NegativeOrZero private BigDecimal value;
NotBlank CharSequence 被注释的字符串至少包含一个非空字符 @NotBlank private String noBlankString;
NotEmpty CharSequence/Collection/Map/Array 被注释的集合元素个数大于0 @NotEmpty private List<string> values;
NotNull any 被注释的值不为空 @NotEmpty private Object value;
Null any 被注释的值必须空 @Null private Object value;
Past java中的各种日期类型 指定日期应该在当期日期之前 @Past private LocalDateTime past;
PastOrPresent java中的各种日期类型 指定日期应该在当期日期或之前 @PastOrPresent private LocalDateTime pastOrPresent;
Pattern CharSequence 被注释的字符串应该符合给定得到正则表达式 @Pattern(\d*) private String numbers;
Positive BigDecimal/BigInteger/byte/short/int/long/float/double及包装类 被注释的值应该是正数 @Positive private BigDecimal value;
PositiveOrZero BigDecimal/BigInteger/byte/short/int/long/float/double及包装类 被注释的值应该是正数或0 @PositiveOrZero private BigDecimal value;
Size CharSequence/Collection/Map/Array 被注释的集合元素个数在指定范围内 @Size(min=1,max=10) private List<string> values;

3、Hibernate数据校验

基于JSR数据校验规范,Hibernate添加了一些新的注解校验,然后实现了JSR的Validator接口用于数据校验。

@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=) 被注释的元素必须在合适的范围内

4、SpringMVC整合hibernate-validator后端数据校验

1、导入依赖

<!--hibernate-validator-后台校验-->
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.1.5.Final</version>
</dependency>
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.1.Final</version>
</dependency>
<!--hibernate-validator-后台校验-->

2、在springmvc.xml配置文件中配置相关信息

<!--    hibernate-validator数据检验-->
 <!-- 注册验证器 -->
 <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
     <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
 </bean>

3、实体类标注

@Data
public class User {

    @NotBlank
    @Size(max=64)
    private String name;

    @Min(0)
    @Max(200)
    private int age;
    
   /* @Range(min = 1, max = 150) 
    private Integer age;
    @NotEmpty
    private String name;*/
    
    @Length(min = 4, max = 20, message = "用户名只能在4~20位之间")
    private String username;
    @Length(min = 4, max = 20, message = "密码只能在4~20位之间")
    private String password;
    @Pattern(regexp = "^1[35678]\\d{9}$", message = "手机号格式不正确")
    private String phone;

}

4、controller应用

 @RequestMapping("/update")
    public R update(@RequestBody @Valid Book book, BindingResult result){

        String str="";
        if(result.hasErrors()){
            for (ObjectError error : result.getAllErrors()) {
                str+=error.getDefaultMessage();
            }

            R r = new R(Code.UPDATE_ERR, "修改失败", str);
            return r;
        }
        int res=  bookService.editBook(book);
        if(res>0) {
            R r = new R(Code.UPDATE_OK, "修改成功", null);
            return r;
        }else{
            R r = new R(Code.UPDATE_ERR, "修改失败", null);
            return r;
        }

    }

标签:Hibernate,BigDecimal,int,简介,校验,private,注释,value
From: https://www.cnblogs.com/YxinHaaa/p/17476569.html

相关文章

  • webkit简介
    WebKit是一款开源的浏览器引擎,主要用于渲染HTML网页和执行JavaScript代码。WebKit起源于苹果公司,最初是为了开发Safari浏览器而创建的。现在,它已经成为许多浏览器(如苹果的Safari、部分版本的谷歌Chrome等)和应用程序背后的核心渲染引擎。WebKit主要包含两个核心组件:1.WebCore:负责......
  • 同一实体多字段的不同校验--validate
    validate的使用,同一实体分组校验ValidatorFactory文章目录前言一、举个例子二、使用步骤1.引入依赖2.加入分组标识3.分组校验应用1.明确知道当前接口方法(新增/修改)2.不明确当前接口方法(修改增加为同一个接口)总结前言实际开发中遇到这样一个问题,一个接收参数的实体类,......
  • CAS简介
    文章目录前言一、锁?CAS?二、juc--java.util.concurrent1.CAS思想的落地2ABA问题出现3可以解决的问题4缺点总结前言CAS的全称是:比较并交换(CompareAndSwap)。在CAS中,有这样三个值:V:要更新的变量(var)E:预期值(expected)N:新值(new)比较并交换的过程如下:判断V是否等于E,如果等于......
  • 计算机网络协议简介(二)
    一、网络协议的概念网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。网络协议是由语法、语义、时序三个要素组成,语义表示要做什么,语法表示要怎么做,时序表示做的顺序。语义:解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做......
  • Android自动化随机测试工具-Monkey简介
    Monkey简介Monkey的名字是有何而来的呢?这个没有去怎么考究,Monkey这个工具就是一个调皮的猴子,在App中乱按、乱摸、乱滚、乱跳。Monkey测试是Android平台下自动化测试的一种快速有效的手段,通过Monkey工具可以模拟用户触摸屏幕、滑动轨迹球、按键等操作来对模拟器或者手机设......
  • MySQL闪回工具简介 及 binlog2sql工具用法
    一、闪回工具简介1.工具分类第一类以patch形式集成到官方工具mysqlbinlog中优点上手成本低。mysqlbinlog原有的选项都能直接利用,只是多加了一个闪回选项,未来有可能被官方收录。支持离线解析。缺点兼容性差、项目活跃度不高。难以添加新功能,实战效果欠佳。安装麻烦。需要对m......
  • TCP/IP 协议简介
    一图看完本文一、计算机网络体系结构分层计算机网络体系结构分层计算机网络体系结构分层不难看出,TCP/IP与OSI在分层模块上稍有区别。OSI参考模型注重“通信协议必要的功能是什么”,而TCP/IP则更强调“在计算机上实现协议应该开发哪种程序”。二、TCP/IP基础1.TCP/IP的具......
  • SQL简介-通用语法-分类
       ......
  • 物联网开源操作系统简介
    物联网、开源、操作系统是目前IT业界的热门词汇,也正是这三个词汇构成了物联网开源操作系统。那么,对于物联网开源操作系统,你了解有多少呢?我们今天带大家一起走近物联网操作系统,同时介绍10款经典的物联网操作系统。从物联网说起物联网,英文名:InternetofThings,简称:IoT,是互......
  • Xilinx GTH 简介 ,CoaXpress FPGA PHY 部分
    什么是GTHGTH是XilinxUltraScale系列FPGA上高速收发器的一种类型,本质上和其它名称如GTP,GTX等只是器件类型不同、速率有差异;GTH最低速率在500Mbps,最高在16GbpsCoaXpressHost/DeviceIP均需要用到厂商的GT收发器模块,因此这里写一篇笔记作为开发记录GTH的特性physicalc......