对象建模还是E-R建模

转自:http://qiaomuren.blog.hexun.com/11855630_d.html

良好的模型对于高效的开发高性能的应用系统是至关重要的。每个团队在进行设计时都必须得进行选择:是用纯
OOD/OOA 的思想进行对象建模或者用面向关系数据的思想进行 E-R 建模,这是个艰难的抉择!选择其中的每一种都会导致不同的开发流程,其中各有利弊。

  下面是使用对象建模的一些工具和方法步骤:

  流程:类图 —>Java 源代 - à ( Xdoclet)- à 映射文件( .hbm.xml - à 数据库表 - à 物理数据模型(如果需要的话)

  1、   先用对象建模工具(例如 rose )把类图设计好。在该步骤中要注意把各个类之间的关系(如一对一、一对多、多对多)搞清楚,这使得下一步添加 Xdoclet 时工作量比较小。

2、   用对象建模工具从设计好的类图中导出 Java 源代码。

3、   导出源代码后就可在源代码中添加 Xdoclet 标签了,这些标签用于生成 Hibernate 的映射文件。在添加 Xdoclet 标签时要注意的是:要把 Xdoclet 标签加在每个属性的 getter ()方法之前,如果只在属性前加标签生成映射文件时就会报错。

举个例子 , 有一个人的实体类,我们在加 Xdoclet 时要特别注意,不要只加在属性之前,而是要加在每个属性的 getter ()方法之前,事实上可以不在属性之前加 Xdoclet 标签,如下所示例子中有一个 Set 类型的 address 属性,元素是 Address 对象(例子没有给出),假设一个人有多个地址,这是一个一对多的关系,在配置一对多和多对多关系时有几点要注意:

import java.io.Serializable;

import java.util.Set;

import java.util.HashSet;

 

/**

  *         @hibernate .class

  *         table="Tperson"

  *

  */

public class Person implements Serializable {

    private Long personId ;

    private String name ;

    private int age ;

    private Set address = new HashSet(); // 在这一定要实例化 address 对象

    // 我们应该在这加 Xdoclet

   

    /**

      * 年龄

      *      @hibernate .property

      *      type="int"

      *      column="age"

      */

    public int getAge() {

       return age ;

    }

   

    public void setAge( int age) {

       this . age = age;

    }

   

    /**

      * 用户 ID

      *      @hibernate .id

      *      generator="native"

      *      type="java.lang.Long"

      *      column="personId"

      */

    public Long getPersonId() {

       return personId ;

    }

   

    public void setPersonId(Long personId) {

       this . personId = personId;

    }

   

    /**

      * 用户姓名

      *      @hibernate .property

      *      type="java.lang.String"

      *      column="name"

      *      length="32"

      *      not - null="true"

      */

    public String getName() {

       return name ;

    }

   

    public void setName(String name) {

       this . name = name;

    }

   

    /**

      * 用户地址

      *      @hibernate .set

      *      table - "Taddress"

      *      class="Address"

      *

      *      @hibernate .collection - key

      *      column="personId"

      *

      *      注意下面是 collection - one - to - many 而不是 one - to - many

      *      对于多对多关系也是这样 collection - many - to - many

      *      @hibernate .collection - one - to - many   

      *      class="Person"

      */

    public Set getAddress() {

       return address ;

    }

 

    public void setAddress(Set address) {

       this . address = address;

    }

}

加完了这些 Xdoclet 我们就可以用工具生成映射文件了。一般用得较多的 Xdoclet Hibernate 标签有 :

              @hibernate .class

              @hibernate .id

              @hibernate .property

              @hibernate .set

              @hibernate.many-to-one

 

以上只给出了一些经常用的标记,大家在开发时可参考 Xdoclet 手册。

4、   Myeclipse project properties 窗口,选择左侧的 “MyEclipse-XDoclet” “Add Standard...” “Choose an entry” 这儿选择 “Standard Hibernate” 。如下图:右键电击你的工程,然后选择属性,你就会看到这个图。然后选择 Myeclipse 选项就会看到其中有一个子选项 Xdoclet ,点击 Xdoclet 出现如下界面,然后点击 Add Standard 按钮,选择其中的 Standard Hibernate ,我们可以看到, Xdoclet 支持很多技术的代码生成。

5、   右键点击工程根目录,选择 Myeclipse 选项的 Run Xdoclet ,这样就可以生成映射文件了生成的映射文件默认情况下是和你的 POJO 在同一目录下。(在这我只举了用 Myeclipse 工具生成映射文件,你也可以用其他方式生成,可选工具: Xdoclet—1.2.3( 支持 Hibernate3) Ant 构建,具体配置请查阅相关资料)

  6 、这一步要从映射文件生成数据库表。下面写一个测试类来生成数据库表,同时也一定程度上验证了我们的映射文件的配置文件是否正确,如果不正确,那么在生成数据库表时就会发生错误。

import java.io.File;

import java.util.List;

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.HibernateException;

import org.hibernate.cfg.Configuration;

import junit.framework.TestCase;

public class TestHibernate extends TestCase {

    protected Session session ;

    public TestHibernate(String s) {

       super (s);

    }

    protected void setUp() throws Exception {

       super .setUp();

       try {

           Configuration config = new Configuration().configure( new File( "C:\\hibernate.cfg.xml" ));

           SessionFactory factory = config.buildSessionFactory();

           session = factory.openSession();

       } catch (HibernateException e) {

           e.printStackTrace();

       }

    }

    protected void tearDown() throws Exception {

       super .tearDown();

       try {

           session .close();

       }

你可能感兴趣的:(Hibernate,xml,MyEclipse,ant,JUnit)