当前位置:首页 > 编程开发

基于Hibernate校验器组件实现Web开发中的校验逻辑(1)



热门软件下载:

正文:

【51cto.com独家特稿】一、简介

虽然在web应用程序的多个层内加入相应的数据校验功能都十分必要,但是以前实现这项任务是相当费时的,这使得许多开发者干脆略过它—这明显会带来一系列的问题。但是,随着在最新版本的java平台中引入了注解概念,校验问题容易得多了。在本文中,我将向你展示在你的web应用程序中使用hibernate注解中的校验器(validator)组件来构建和维护校验逻辑是多么容易的事情。

二、预备知识

阅读本文前,你应该对下列内容有一个基本了解:java 5.0(具体地说是其中的“注解”概念);jsp 2.0(因为我在一个tld中创建标签文件和定义函数,它们都是jsp 2.0新引入的特征);还有hibernate和spring框架。另外请注意,即使没有使用hibernate实现持久性存储,你也可以在自己的应用程序中使用hibernate validator。

与以前的版本相比,java se 5增加了许多改进,也许再也没有比注解更为重要的了。借助于注解,你可以最终为你的java类构造出一种标准的、一流的元数据框架。多年以来,hibernate用户一直是手工地编写*.hbm.xml文件(或使用xdoclet自动完成这一任务)。如果你手工地创建xml文件的话,相应于每一种需要的持久性属性,你都必须更新两个文件(类定义和xml映射文档)。尽管使用hibernatedoclet可以简化这一工作(具体示例请参考列表1),但是要求你确保你的hibernatedoclet版本支持你想使用的hibernate版本。另一方面,这种doclet信息在运行时刻还不可用,因为它被编码成javadoc风格的注释。列表2中的hibernate注解对这些选择进行了改进—提供一个标准的简明的映射类,而且在运行时刻可用。

列表1.使用hibernatedoclet创建的hibernate映射代码

/**

* @hibernate.property column="name" length="60" not-null="true"

*/

public string getname() {

return this.name;

}

/**

* @hibernate.many-to-one column="agent_id" not-null="true" cascade="none"

*    outer-join="false" lazy="true"

*/

public agent getagent() {

return agent;

}

/**

* @hibernate.set lazy="true" inverse="true" cascade="all" table="department"

* @hibernate.collection-one-to-many class="com.triview.model.department"

* @hibernate.collection-key column="department_id" not-null="true"

*/

public list<department> getdepartment() {

return department;

}

列表2.使用hibernate注解创建的hibernate映射代码

@notnull

@column(name = "name")

@length(min = 1, max = name_length) //name_length是一个在另外地方声明的常数

public string getname() {

return name;

}

@notnull

@manytoone(cascade = {cascadetype.merge }, fetch = fetchtype.lazy)

@joincolumn(name = "agent_id")

public agent getagent() {

return agent;

}

@onetomany(mappedby = "customer", fetch = fetchtype.lazy)

public list<department> getdepartment() {

return department;

}

如果你使用hibernatedoclet,那么,只有到生成xml文件或在运行时刻你才能捕获错误。借助于注解,你能够检测编译时刻中的许多错误;或者,如果你使用的是一种优秀的ide的话,在编辑期间也能够检测出许多错误。当从头创建一个应用程序时,你可以利用hbm2ddl工具来由hbm.xml文件为你的数据库生成ddl。特别注意:name属性的最大长度不超过60个字符,也就是说,ddl应该添加一个“not null”型约束—从hibernatedoclet入口添加到ddl中。当你使用注解时,你可以用一种与此类似的方式自动地生成ddl。

尽管上面列举的两种代码映射方案都可以使用;但是,相比之下,注解具有更为清晰的优点。借助于注解,你可以使用约束来指定长度或其它值。你将拥有更快的构建周期而不需要生成xml文件。最大优点是,你能够在运行时刻存取有用的信息,例如一个“not null”注解或长度。除了在列表2展示的注解之外,你还可以指定校验约束。其中,一些非常有用的约束列举如下:

◆@max(value=100)

◆@min(value=0)

◆@past

◆@future

◆@email

在适当的情况下,这些注解将会导致可以使用ddl生成检查约束(显然,@future并不是一种合适的情形)。你还能够据自己的需要创建定制的约束注解。


共5页: 1 [2] [3] [4] [5] 下一页
 ↓相关文章:
© 2006-2008 All Rights Reserved