现在的位置: 首页 > 综合 > 正文

在Struts和Hibernate之间搭起桥梁

2013年08月30日 ⁄ 综合 ⁄ 共 1763字 ⁄ 字号 评论关闭
摘要

  Hibernate和struts是当前市面上几个最流行的开源的库之一。它们很有效 率,是程序员在开发Java企业应用,挑选几个竞争的库的首选。虽然它们经常被一起应用,但是Hibernate的设计目标并不是和Struts一起使 用,而Struts在Hibernate诞生好多年之前就发布了。为了让它们在一起工作,仍然有很多挑战。这篇文章点明了Struts和 Hibernate之间的一些鸿沟,尤其关系到面向对象建模方面。文章也描述了如何在两者间搭起桥梁,给出了一个基于扩展Struts的解决方案。所有的 基于Struts和Hibernate构建的Web应用都能从这个通用的扩展中获益。 字串5

   在Hibernate in Action(Manning,2004十月)这本书里,作者Christian Bauer和Gavin King揭示了面向对象世界的模型和关系数据模型,两个世界的范例是不一致的。Hibernate非常成功地在存储层(persistence Layer)将两者粘合在一起。但是领域模型(domain model)(也就是Model-View-Controller的model layer)和HTML页面(MVC的View Layer)仍然存在不一致。在这篇文章中,我们将检查这种不一致,并且探索解决的方案。

字串6

  范例不一致的再发现

字串4

   让我们先看一个经典的parent-child关系例子(看下面的代码):product和category.Category类定义了一个类型为 long的标示符id和一个类型为String的属性name.Product类也有一个类型为long的标示符id和一个类型为Category的属性 category,表示了多对一的关系(也就是说很多product可以属于一个Category) 字串4

   /*** @hibernate.class table="CATEGORY"*/ public class Category {   private Long id;   private String name;   /**    * @hibernate.id generator-class="native" column="CATEGORY_ID"    */   public Long getId() {      return id;   }   public void setId(Long id) {      this.id = id;   }   /**    * @hibernate.property column="NAME"    */   public String getName() {      return name;   }   public void setName(Long name) {      this.name = name;   }}/*** @hibernate.class table="PRODUCT"*/public class Product {   private Long id;   private Category category;   /**    * @hibernate.id generator-class="native" column="PRODUCT_ID"    */   public Long getId() {      return id;   }   public void setId(Long id) {      this.id = id;   }   /**    * @hibernate.many-to-one    * column="CATEGORY_ID"    * class="Category"    * cascade="none"    * not-null="false"    */   public Category getCategory() {      return category;   }   public void setCategory(Category category) {      this.category = category;   }} 字串7

  我们希望一个product可以被更改category,所以我们的HTML提供了一个下拉框列出所有Category.

阅读全文:http://www.javah.net/Struts/20070505/759.html

 

抱歉!评论已关闭.