利用Hibernate的配置反向生成数据库

利用Hibernate配置文件生成数据库

 

 

目前很多人使用Hibernate作为持久层,如果我们已经写了配置文件poweracl.hbm.xml,则不必再费劲写SQLDDL。除了利用工具 SchemaExport之外,还可以编写程序来自动初始化数据库,并且生成SQL DDL

1.Hibernate配置 文件hibernate.cfg.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">

 

<!-- Generated by MyEclipse Hibernate Tools.                   -->

<hibernate-configuration>

    <session-factory>

        <!--hb在运行时显示实际执行的sql语句 -->

       <property name="show_sql">true</property>

       <!-- 使显示的sql格式化-->

       <property name="format_sql">true</property>

        <property name="connection.username">root</property>

        <property name="connection.url">jdbc:mysql://localhost:3306/hibtest</property>

        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <property name="connection.password">netjava</property>

        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

     

  <!-- 指明user这个pojo类的映射文件的路径 -->

        <mapping resource="com/hibtest/poweracl.hbm.xml" />

       

    </session-factory>

 

</hibernate-configuration>注意:(1JDBC驱动为com.mysql.jdbc.Driver,可以根据所使用的库而更换。
   2dialect 为数据库方言,根据所使用数据库不同而不同。这里是Mysql

   3jdbc.fetch_size jdbc.batch_size过小会降低性能,这里是建议设置。

  (4mapping文件根据文件所在路径而不同。这里是 放在WEB-INF/classes/com/hibtest/目录下。

  

 

 

  

2.数据库映射配置poweracl.hbm.xml

 


  (2)

<?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="com.hibtest.user" table="user" discriminator-value="W">

       <id name="loginname" type="string">

           <column name="loginname" sql-type="char(16)" not-null="true"></column>

           <generator class="assigned"></generator>

       </id>

       <property name="password" type="string">

           <column name="password" sql-type="varchar(20)"></column>

       </property>

       <property name="name" type="string">

           <column name="name" sql-type="varchar(20)"></column>

       </property>

       <property name="email" type="string">

           <column name="eamil" sql-type="varchar(60)"></column>

       </property>

       <property name="modified" type="date">

             <column name="modifier"></column>

       </property>

       <property name="creater" type="date">

             <column name="creater"></column>

       </property>

       <property name="lastlogin" type="date">

              <column name="lastlogin"></column>    

       </property>

    </class>

</hibernate-mapping>  

说明:具体的poweracl.hbm.xml要根据数据库表而设置,这里只是列举一个user表。

 

3.初始化数据库类

package com.hibtest;

 

import java.io.File;

 

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;

 

/**//**

* <p/> vedadou

* Date: 2004-02-25

* Time: 9:40:15

*/

public class InitDB {

static Session session;

 

public static void main(String[] args){

       Configuration config = null;

       Transaction tx = null;

       try {

       config = new Configuration().configure(new File("hibernate.cfg.xml"));

       System.out.println("Creating tables...");

       SchemaExport schemaExport = new SchemaExport(config);

       schemaExport.create(true, true);

       System.out.println("Table created.");

       SessionFactory sessionFactory = config.buildSessionFactory();

       session = sessionFactory.openSession();

       tx = session.beginTransaction();

       tx.commit();

      

       } catch (HibernateException e){

       e.printStackTrace();

       try {

       tx.rollback();

       } catch (HibernateException e1) {

       e1.printStackTrace();

       }

       } finally {

      

       }

       }

      

}

始化之前,应该先手工创建一个空数据库,然后再执行InitDB程序

你可能感兴趣的:(Hibernate)