转自: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();
}