使用 hibernate 根据映射文件生成数据库表
为了更好的显示效果,可以在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 根据映射文件生成数据库表的更多相关文章
- hibernate笔记--通过SchemaExport生成数据库表
方法比较简单,项目中只需要两个java类(一个实体类,如User,一个工具类),两个配置文件(hibernate必须的两个配置文件hibernate.cfg.xml,与User.hbm.xml),即可 ...
- Mybatis映射文件中数据库表列名称和POJO成员域的联系
下面是Mybatis的SQL映射文件. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ma ...
- [Nhibernate]SchemaExport工具的使用(一)——通过映射文件修改数据表
目录 写在前面 文档与系列文章 SchemaExport工具 SchemaUpdate工具 一个例子 总结 写在前面 上篇文章介绍了使用代码生成器的nhibernate模版来生成持久化类,映射文件等内 ...
- 使用oracle数据库和MySQL数据库时hibernate的映射文件.hbm.xml的不同
假设是使用oracle数据库.那么hibernate的映射文件.hbm.xml例如以下: <id name="xuehao" column="xuehao" ...
- Hibernate生成数据库表
首先创建实体类 import java.util.Date; public class ProductionEntity { public Integer getId() { return id; } ...
- Hibernate之深入Hibernate的映射文件
这周周末 要把hibernate的映射文件搞定 .. 1.映射文件的主结构 主要结构 :根元素为<hibernate-mapping ></hibernate-mapping> ...
- Mybatis总结之如何自动生成数据库表结构
一般情况下,用Mybatis的时候是先设计表结构再进行实体类以及映射文件编写的,特别是用代码生成器的时候. 但有时候不想用代码生成器,也不想定义表结构,那怎么办? 这个时候就会想到Hibernate, ...
- 用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean)
用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean) 安装: 在help中eclise marksplace中查询JBo ...
- sts使用mybatis插件直接生成数据库表的mapper类及配置文件
首先点击help------>Eclipse Marketplace----->在find中搜索mybatis下面图片的第一个 点击installed 还需要一个配置文件generator ...
随机推荐
- Android默认启动程序问题
参考地址:http://www.cnblogs.com/Lewis/p/3316946.html 怎么让我们自己开发的Android程序设为默认启动呢?其实很简单,只要在AndroidManifest ...
- winform —— 界面
winform 界面简单介绍 窗体事件:理解为委托变量,指向哪个函数,就执行哪个函数.窗体:显示窗体的过程是一个通过模板造对象的过程.先走构造函数,构造函数中的InitializeComponent( ...
- UVALive 6959 - Judging Troubles
给两组字符串,最多有多少对相同. map做映射判断一下. #include <iostream> #include <cstdio> #include <map> ...
- 是一个IPV6地址
每次在VS上调试,发现本机地址是 ::1 这种就不解.由于太忙而没关注,今天看了IPV6的文章才明白.原来这是个IPV6地址,也就是本机环回地址.以前是127.0.0.1,IPV4版本,而IPV6的就 ...
- js中一些常用的基本函数
如何使用jquery刷新当前页面下面介绍全页面刷新方法:有时候可能会用到window.location.reload()刷新当前页面.parent.location.reload()刷新父亲对象(用于 ...
- Myeclipse 2014配置SVN详细图解
1.什么是SVN? 管理软件开发过程中的版本控制工具. 2.myeclipse安装SVN插件步骤,以myeclipse 2014为例. (1)下载SVN插件 http://subclipse.tigr ...
- 无法关闭的QT程序——思路开阔一下,原来这么简单!
做一个无法关闭的QT程序(想关闭时要在任务管理器里关闭),看似很难, 其实它并不难,只要让程序在关闭时启动它自身就可以了. 上代码: #include <QtGui> class Temp ...
- perl 调用按钮输出到文本框
sub push_b4 { #$txt -> insert('end'); #select $txt; system("expect c:\\\\expect.txt >expe ...
- VMware双网卡实现虚拟机连开发板和Internet
前面已经介绍过关于VMware产生的虚拟交换机和虚拟网卡,当宿主机拥有两个网卡时,可以让虚拟系统同时实现上网和连接开发板的功能. 首先,在设置中虚拟出两块虚拟机网卡,一块连接VMnet0交换机一块连接 ...
- JIRA官方:为什么要用JIRA?
因为你有各种事务 工作中总是有各种事务要去处理,而这些事务不仅仅是代码中的Bug.这些事务充斥在你的收件箱中,各种想法散落在 Excel表格里,需求隐藏在原有的业务系统中.使用JIRA可以轻松捕捉和管 ...