优缺点:
经过项目实践, 总结出先设计表的几个缺点:
- 1 . 各种不同数据库间类型与 Java 类型映射关系不同导致 E-R 设计的难度, 使得 o/r 的数据库可移植性大打折扣。
- 2 . business 发生变化 需要修改 表结构时, 需要修改的地方有 表, 映射文件, 实体, E-R 图, 这些工作都非常繁琐且容易出错, 如果先设计 Entity Object, 不会存在上述问题.
- 3 . 非 OO 的设计思路可能会导致涉及到多表查询的复杂度增加.
==========================
一、由映射文件生成对应的数据库
自动生成只适用于数据库的表,数据库没有的话,需要自已手工建立。
(方法一:启动服务器自动生成数据库表)
此方法需要配置hibernate.cfg.xml 文件,在该文件中添加属性:
<property name="hbm2ddl.auto">create</property>
这种方式可以在启动web服务后首次调用Hibernate时自动建立数据库表,建立表后再把这个属性去掉,防止以后自动重新建立表,丢失数据。
(方法二:由java文件主函数生成数据库表)
1、新建工程dianziHibernateBase。首先第一步,还是导入必备的jar包。
Hibernate3.3.1 必备包:
antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
hibernate3.jar
javassist-3.4.GA.jar
jta-1.1.jar
mysql3.1.11 驱动:
mysql-connector-java-3.1.11-bin.jar
另外还有三个包是必备的,可以到findjar网站 搜索并下载,这个网站真的是很有用的一个工具网站 。
log4j-1.2.13.jar
slf4j-api-1.5.6.jar
slf4j-log4j12-1.5.6.jar
其次是安装mysql5,我安装的是5.0.18,有关mysql的安装请查看《mysql5全新安装手册》
2、拷贝所需文件
从eclipse开发J2EE项目系列(2) 中拷贝如下文件,内容无需修改:
SuperAModel.java
SuperIModel.java
User.java
AutoExportDB.java
User.hbm.xml
hibernate.cfg.xml
目录结构如下图:
其中"AutoExportDB.java"是工具类主函数,我们执行如下代码,就能轻松将User类导入数据库转变成数据库中的表。不过,前提是我们已经在MySQL中建立了一个名为"struts2"的数据库(根据配置文件hibernate.cfg.xml得来)。
利用此方法,可以先进行Java类的设计,再自动生成配置文件和数据库表,这样做更符合OO的设计思想,但是如果遇到表与表之间关系复杂,可能就不是很适合了。实际项目开发中,多应用由数据库表生成Hibernate实体类和配置文件。
/**
*
*/
package com.dianzi.util;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
/**
* 生成数据库表
*
* @author 点子二木
* @date 2009-1-7
* @version 1.0
*/
public class AutoExportDB {
static Session session;
static Configuration config = null;
static Transaction tx = null;
/**
* 运行此类,通过POJO类和配置文件,创建数据库结构
*
* @param args
*/
public static void main(String[] args) {
System.out.println("开始自动创建数据库结构...");
try {
config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
SchemaExport schemaExport = new SchemaExport(config);
schemaExport.create(true, true);
tx.commit();
System.out.println("数据库结构创建成功...");
} catch (HibernateException e) {
e.printStackTrace();
System.out.println("数据库结构创建失败...");
try {
tx.rollback();
} catch (HibernateException e1) {
e1.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("数据库结构创建失败...");
try {
tx.rollback();
} catch (HibernateException e1) {
e1.printStackTrace();
}
} finally {
System.out.println("结束...");
}
}
}
二、由数据库表生成Hibernate实体类和配置文件 (本部分尚未学习清楚,以后再补充)
(方法一:Myeclipse中集成了此工具)
由于不免费,且工具非常简单易用,故不详细说明。
(方法二:)
Hibernate Tools for Eclipse插件的安装和使用
http://blog.chinaunix.net/u1/45779/showart_1409209.html
(方法三:)
Hibernate Synchronizer