您的位置:首页 > 其它

Hibernate3 学习(十一)

2006-09-27 09:53 148 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: