2006 年 10 月 10 日
盡管在 Web 應用程序中盡可能多的層次中構建數據驗證非常重要,但是這樣做卻非常耗時,以至于很多開發人員都會干脆忽略這個步驟 —— 這可能會導致今后大量問題的產生。但是隨著最新版本的 java 平臺中引入了注釋,驗證變得簡單得多了。在本文中,Ted Bergeron 將向您介紹如何使用 Hibernate Annotations 的 Validator 組件在 Web 應用程序中輕松構建并維護驗證邏輯。
有時會有一種工具,它可以真正滿足開發人員和架構師的需求。開發人員在第一次下載這種工具當天就可以在自己的應用程序中開始使用這種工具。理論上來說,這種工具在開發人員花費大量時間來把握其用法之前就可以從中獲益。架構師也很喜歡這種工具,因為它可以將開發人員導向更高理論層次的實現。Hibernate Annotations 的 Validator 組件就是一種這樣的工具。
在閱讀本文之前,應該對 Java 平臺版本 5(尤其是注釋)、jsp 2.0(因為本文中創建了一些標簽文件,并在 TLD 中定義了一些函數,它們都是 JSP 2.0 的新特性)和 Hibernate 及 SPRing 框架有一個基本的了解。請注重即使不使用 Hibernate 來實現持久性,也可以在自己的應用程序中使用 Hibernate Validator。
Java SE 5 為 Java 語言提供了很多需要的增強功能,不過其他增強功能可能都不如 注釋 這樣潛力巨大。使用 注釋,我們就終于具有了一個標準、一級的元數據框架為 Java 類使用。Hibernate 用戶手工編寫 *.hbm.xml 文件已經很多年了(或者使用 XDoclet 來自動實現這個任務)。假如手工創建了 XML 文件,那就必須對每個所需要的持久屬性都更新這兩個文件(類定義和 XML 映射文檔)。使用 HibernateDoclet 可以簡化這個過程(請參看清單 1 給出的例子),但是這需要我們確認自己的 HibernateDoclet 版本支持要使用的 Hibernate 的版本。doclet 信息在運行時也是不可用的,因為它被編寫到了 Javadoc 風格的注釋中了。Hibernate Annotations,如圖 2 所示,通過提供一個標準、簡明的映射類的方法和所添加的運行時可用性來對這些方式進行改進。
/** * @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;}@NotNull@Column(name = "name")@Length(min = 1, max = NAME_LENGTH) // NAME_LENGTH is a constant declared elsewherepublic 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 應該添加非空約束 —— 都被從 HibernateDoclet 項添加到 DDL 中。當使用注釋時,我們可以以類似的方式自動生成 DDL。
新聞熱點
疑難解答