为了更好的显示效果,可以在hibernate.cfg.xml配置文件的<session-factory>标签里加入以下内容:

显示sql语句和格式化显示sql语句:

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

方法一:使用SchemaExport

映射文件Student.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="accp.hibernate">
<class name="Student" table="Student">
<id name="id" column="id">
<generator class="native" />
</id>
<property name="name" type="java.lang.String" column="name" />
<property name="birthDay" type="java.util.Date" column="birthday" />
</class>
</hibernate-mapping>

对应的实体类,Student.java

package accp.hibernate;

import java.util.Date;

public class Student{
private Integer id;
private String name;
private Date birthDay;
//省略get,set方法......
}

关键代码!使用SchemaExport生成表的代码如下:

Test.java:

package accp.hibernate;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport; public class Test {
public static void main(String[] args) {
Configuration conf = new Configuration().configure(); //读取并解析配置文件
SchemaExport export=new SchemaExport(conf); //创建SchemaExport
//执行生成表。参数1:是否显示sql语句,参数2:是否到数据库里执行
export.create(true, true);
}
}

方法二:配置<property name="hbm2ddl.auto">属性

在hibernate.cfg.xml配置文件的<session-factory>标签里加入以下内容:

<property name="hbm2ddl.auto">create</property>

<property name="hbm2ddl.auto">的选项有:validate | update | create | create-drop

areate 如果数据库里没这张表,则自动创建。
update 配置文件里的表结构发生改变,重新创建该表。
create-drop

在显式关闭SessionFactory 时,将删除掉数据库 schema。

validate 验证,每次对数据库表作操作时验证是否和映射文件的结构对应上。

配置完成后。只要在程序里对该“表”进行操作,hibernate就会自动创建该表。如Test.java:

以上两种方法都能根据映射文件往数据库中创建表,并在控制台中打印出如下sql建表语句:

Hibernate:
drop sequence hibernate_sequence
Hibernate:
create table Student (
id number(10,0) not null,
name varchar2(255 char),
birthday timestamp,
primary key (id)
)
Hibernate:
create sequence hibernate_sequence

========================================================================================

补充:在hibernate自动创建表时添加约束

需要在hibernate创建表时添加约束的话,可以在映射文件相应字段的property里添加<column>子元素。如name字段:

<property name="name" type="java.lang.String">
<column name="name"></column>
</property>

在<column>标签里添加相应的属性即可,如设置name列的长度为10,只能以a开头:

<property name="name" type="java.lang.String">
<column name="name" length="10" check="name like 'a%'"></column>
</property>

这时,hibernate打印出来的sql语句为:

drop table Student cascade constraints

    drop sequence hibernate_sequence

    create table Student (
id number(10,0) not null,
name varchar2(10 char) check (name like 'a%'),
birthday timestamp,
primary key (id)
) create sequence hibernate_sequence

使用 hibernate 根据映射文件生成数据库表的更多相关文章

  1. hibernate笔记--通过SchemaExport生成数据库表

    方法比较简单,项目中只需要两个java类(一个实体类,如User,一个工具类),两个配置文件(hibernate必须的两个配置文件hibernate.cfg.xml,与User.hbm.xml),即可 ...

  2. Mybatis映射文件中数据库表列名称和POJO成员域的联系

    下面是Mybatis的SQL映射文件. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ma ...

  3. [Nhibernate]SchemaExport工具的使用(一)——通过映射文件修改数据表

    目录 写在前面 文档与系列文章 SchemaExport工具 SchemaUpdate工具 一个例子 总结 写在前面 上篇文章介绍了使用代码生成器的nhibernate模版来生成持久化类,映射文件等内 ...

  4. 使用oracle数据库和MySQL数据库时hibernate的映射文件.hbm.xml的不同

    假设是使用oracle数据库.那么hibernate的映射文件.hbm.xml例如以下: <id name="xuehao" column="xuehao" ...

  5. Hibernate生成数据库表

    首先创建实体类 import java.util.Date; public class ProductionEntity { public Integer getId() { return id; } ...

  6. Hibernate之深入Hibernate的映射文件

    这周周末 要把hibernate的映射文件搞定 .. 1.映射文件的主结构 主要结构  :根元素为<hibernate-mapping ></hibernate-mapping> ...

  7. Mybatis总结之如何自动生成数据库表结构

    一般情况下,用Mybatis的时候是先设计表结构再进行实体类以及映射文件编写的,特别是用代码生成器的时候. 但有时候不想用代码生成器,也不想定义表结构,那怎么办? 这个时候就会想到Hibernate, ...

  8. 用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean)

    用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean) 安装: 在help中eclise marksplace中查询JBo ...

  9. sts使用mybatis插件直接生成数据库表的mapper类及配置文件

    首先点击help------>Eclipse Marketplace----->在find中搜索mybatis下面图片的第一个 点击installed 还需要一个配置文件generator ...

随机推荐

  1. 《JavaScript 闯关记》之数组

    数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引. JavaScript 数组是无类型的,数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类型 ...

  2. android第三方分享之友盟社会化组件

    前言 现在几乎所有的app都带有分享功能,第一为了更好地推广自己的产品,第二作为使用者也能及时的把自己觉得好的文章,话题,app分享到社交平台供大家一起学习和使用.开发中虽然android系统自带分享 ...

  3. 第二章实例:动态生成View控件例子---小球跟随手指滑动

    package mydefault.packge; import android.app.Activity; import android.content.Context; import androi ...

  4. Reverse Words in a String (JAVA)

    Given an input string, reverse the string word by word. For example,Given s = "the sky is blue& ...

  5. iOS之极光推送

    注册JPush账号 JPush官网 下载SDK 下载地址:https://www.jpush.cn 根据文档进行集成 文档:http://docs.jpush.io/guideline/ios_gui ...

  6. HTML5 自定义属性 data-*介绍

    在HTML5之前HTML4我们也可以自定义属性通过setAttribute去设置或者直接写在HTML标签里面那么HTML5新增data-*(*可以替换成你喜欢的任意名字)属性有什么用呢? 更便的捷操作 ...

  7. C++中vector和list排序

    容器.泛型算法.和类是不是就是C++相对于C"++"的那部分呢?暂时先这么认为吧.如果这篇博客有幸被别人看到,请帮忙指出.--C++ 菜鸟 留. vector的迭代器是随机访问迭代 ...

  8. png压缩工具-PngoutWin

          PngoutWin是一款聪明的png图片压缩工具,别的压缩工具压缩PNG是通过丢弃透明层来达到减肥的目的.可是不能透明的PNG还能叫PNG吗?PngoutWin它不会丢弃原本的透明,而是通 ...

  9. UVA 10375 Choose and divide

    n! 分解素因子 快速幂 ei=[N/pi^1]+ [N/pi^2]+ …… + [N/pi^n]  其中[]为取整 ei 为数 N!中pi 因子的个数: #include <iostream& ...

  10. 转:C4项目中验证用户登录一个特性就搞定

    转:C4项目中验证用户登录一个特性就搞定   在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性.     // 摘要:    //     表示一个特性,该特性用于限制调用 ...