14.从映像文件生成数据表
在您撰写好*.hbm.xml映射文件之后,您可以使用org.hibernate.tool.hbm2ddl.SchemaExport来自动建立数据库表格,假设您的User.hbm.xml如下:
User.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="onlyfun.caterpillar.User"
table="user">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native"/>
</id>
<property name="name" column="name" type="java.lang.String"/>
<property name="age" column="age" type="java.lang.Integer"/>
</class>
</hibernate-mapping>
在hibernate.cfg.xml中设定JDBC等相关设定:
hibernate.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 显示实际操作数据库时的SQL -->
<property name="show_sql">true</property>
<!-- SQL方言,这边设定的是MySQL -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- JDBC驱动程序 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- JDBC URL -->
<property name="connection.url">jdbc:mysql://localhost/demo</property>
<!-- 数据库使用者 -->
<property name="connection.username">caterpillar</property>
<!-- 数据库密码 -->
<property name="connection.password">123456</property>
<!-- C3P0 连接池设定 -->
<property name="c3p0.min_size">5</property>
<property name="c3p0.max_size">20</property>
<property name="c3p0.timeout">1800</property>
<property name="c3p0.max_statements">50</property>
<!-- 对象与数据库表格映像文件 -->
<mapping resource="onlyfun/caterpillar/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
可撰写一个程序如下:
HbmToTable.java
package onlyfun.caterpillar;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class HbmToTable {
public static void main(String[] args) {
Configuration config = new Configuration().configure();
System.out.println("Creating tables...");
SchemaExport schemaExport = new SchemaExport(config);
schemaExport.create(true, true);
}
}
运行程序之后,将会有以下的结果:
Creating tables...
10:39:10,203 DEBUG SchemaExport:143 - drop table if exists user
create table user (
id integer not null auto_increment,
name varchar(255),
age integer,
primary key (id)
)
10:39:10,203 DEBUG SchemaExport:161 - create table user (
id integer not null auto_increment,
name varchar(255),
age integer,
primary key (id)
)
10:39:10,359 INFO SchemaExport:173 - schema export complete
生成的资料表如下:
+--------+-----------------+------+------+----------+---------------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-----------------+------+------+----------+---------------------+
| id | int(11) | | PRI | NULL | auto_increment |
| name | varchar(255)| YES | | NULL | |
| age | int(11) | YES | | NULL | |
+--------+-----------------+------+------+----------+---------------------+
3 rows in set (0.00 sec)
15.从数据表生成映像文件
可以从数据库的表格自动生成映像文件,首先 下载 Middlegen-Hibernate ,下载后将之解压缩。
这边所使用的数据库是MySQL,并假设您的数据库中已有以下的表格:
CREATE TABLE user (
id INT(11) NOT NULL auto_increment PRIMARY KEY,
name VARCHAR(100) NOT NULL default '',
age INT
);
进入Middlegen-Hibernate解压缩后的config/database目录中,开启mysql.xml,修改当中的数据库配置相关讯息:
mysql.xml
<property name="database.script.file"
value="${src.dir}/sql/${name}-mysql.sql"/>
<property name="database.driver.file"
value="${lib.dir}/mysql-connector-java-3.0.14-production-bin.jar"/>
<property name="database.driver.classpath"
value="${database.driver.file}"/>
<property name="database.driver"
value="com.mysql.jdbc.Driver"/>
<property name="database.url"
value="jdbc:mysql://localhost/demo"/>
<property name="database.userid"
value="caterpillar"/>
<property name="database.password"
value="123456"/>
<property name="database.schema"
value=""/>
<property name="database.catalog"
value=""/>
<property name="jboss.datasource.mapping"
value="mySQL"/>
依照环境来配置
- database.driver.file
- database.driver.classpath
- database.driver
- database.url
- database.userid
- database.password
,预设上MySQL的JDBC驱动程序要放在Middlegen-Hibernate的lib目录下。
Middlegen-Hibernate使用Ant建构,您可以参考一下 Ant入门。
开启 Ant 的建构文件,在Middlegen-Hibernate目录下,修改成为实际的配置:
build.xml
build.xml
<?xml version="1.0"?>
....
<!DOCTYPE project [
<!ENTITY database SYSTEM "file:./config/database/mysql.xml">
]>
<project name="Middlegen Hibernate" default="all" basedir=".">
<!-- project name="Middlegen Hibernate" default="all" basedir="." -->
<property file="${basedir}/build.properties"/>
<property name="name" value="HibernateDemo"/>
....
<property name="build.gen-src.dir"
value="${build.dir}/gen-src"/>
<property name="build.classes.dir"
value="${build.dir}/classes"/>
....
<hibernate
destination="${build.gen-src.dir}"
package="onlyfun.caterpillar"
genXDocletTags="false"
genIntergratedCompositeKeys="false"
javaTypeMapper="middlegen.plugins.hibernate.HibernateJavaTypeMapper"
/>
</middlegen>
<mkdir dir="${build.classes.dir}"/>
</target>
....
</project>
第一个是设定所使用的数据库配置文件,请改为mysql.xml,第二个是设定应用程序名,第三个是设定自动产生文件的输出目录,第四个是设定您的package名称,其它目前采预设即可。
修改完成后,进入Middlegen-Hibernate的目录下,执行Ant建构,如果成功,将会出现以下的窗口:
依需求设定每一个字段选项,要设定属性的话,点选上面表格图标中的属性:
完成设定之后,按最上方的「Generate」按钮,即可产生文件,依我的文件设定,可以在Middlegen-Hibernate目录下的build/gen-src/找到所产生的映射文件,所产生的映射文件如下:
User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
<!--
Created by the Middlegen Hibernate plugin 2.1
http://boss.bekk.no/boss/middlegen/
http://www.hibernate.org/
-->
<class
name="onlyfun.caterpillar.User"
table="user"
>
<id
name="id"
type="java.lang.Integer"
column="id"
>
<generator class="native" />
</id>
<property
name="name"
type="java.lang.String"
column="name"
not-null="true"
length="100"
/>
<property
name="age"
type="java.lang.Integer"
column="age"
length="11"
/>
<!-- Associations -->
</class>
</hibernate-mapping>