hibernate應用實例:hibernate validator 驗證數據合法性

隨着ORM框架的應用,使得開發更加面向對象,不用再專門設計數據庫,由編寫實體,實體映射代替。

所以,實體的編寫是非常基礎而重要的工作,開發工作能及早做就不要往後拖。比如,驗證數據的合法性,我們習慣在action或者controller中做,其實這些工作可以提前在實體做的。

 

JSR303Bean Validator是數據驗證的規範,而hibernate validator 是其中的一個實現。

比如在User實體中,可以使用Hibernate Validator 來對該實體模型進行驗證

需要引入包validation-api-1.0.0.GA.jarhibernate-validator-4.0.0.GA.jar

 

importjavax.persistence.Column;
importjavax.persistence.Entity;
importjavax.persistence.GeneratedValue;
importjavax.persistence.Id;
importjavax.persistence.Table;
 
importorg.hibernate.annotations.GenericGenerator;
importorg.hibernate.validator.constraints.Length;
importorg.hibernate.validator.constraints.NotBlank;
 
@Entity
@Table(name="t_user")
public class User {
 
@Id 
  @GeneratedValue(generator ="system-uuid") 
  @GenericGenerator(name ="system-uuid", strategy = "uuid") 
@Column(length=32)
privateString id;
 
@NotBlank
@Length(min=1,max=32)
@Column(nullable=false,length=32, unique=true, updatable=false)
privateString userName;
 
@Column(length=32)
privateString age;
 
publicString getId() {
returnid;
}
 
publicvoid setId(String id) {
this.id= id;
}
 
publicString getUserName() {
returnuserName;
}
 
publicvoid setUserName(String userName) {
this.userName= userName;
}
 
publicString getAge() {
returnage;
}
 
publicvoid setAge(String age) {
this.age= age;
}
}

 

測試類,通過hibernate validator驗證輸入數據的合法性

importjavax.validation.ConstraintViolation;
importjavax.validation.Validation;
importjavax.validation.Validator;
importjavax.validation.ValidatorFactory;
 
public static void main(String[] args) {
ValidatorFactoryfactory = Validation.buildDefaultValidatorFactory();
 Validator validator = factory.getValidator();
 
 User user = new User();
 user.setUserName("");
 user.setAge("23");
 
Set<ConstraintViolation<User>>constraintViolations =validator.validate(user);
for(ConstraintViolation<User> constraintViolation : constraintViolations) {
       System.out.print(constraintViolation.getPropertyPath() + ": ");
  System.err.println(constraintViolation.getMessage());
    }
}


打印異常信息

userName長度需要在1和32之間

userName: 不能爲空

 

hibernate簡單用起來是很簡單的,但是如果要進行調優,還是很複雜的。後文中會介紹在實體模型中加入hibernate緩存。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章