良好的模型对于高效的开发高性能的应用系统是至关重要的。每个团队在进行设计时都必须得进行选择:是用纯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();
} catch(HibernateException e) {
e.printStackTrace();
}
}
public void testInsert() {