Hibernate_2

hbm2ddl工具位于Hibernate核心软件包中,而hbm2java工具位于Hibernate工具包中,因此需要下载Hibernate工具包,文件形式为HibernateTools-X.zip。

Hibernate提供了从映射文件到数据库Schema的转换工具,名为hbm2ddl工具。使hbm2ddl工具时,必须在Hibernate的配置文件中设置hibernate。dialect属性,显式指定底层数据库的SQL方言。
<target name="schema" depends="compile">
  <taskdef name="hbm2ddlTask"
           classname="org.hibernate.tool.ant.HibernateToolTask"
           classpathref="project.class.path" />
  <hbm2ddlTask destdir="${schema.dir}">
       <configuration
            configurationfile="${class.root}/hibernate.cfg.xml"  />
  <hbm2ddl export="true"  console="true"  create="true"
           drop="true"  outputfilename="dbName.sql"  />
  </hbm2ddlTask>
</target>
hbm2ddl任务的属性
export:          若为true,表示在数据库中执行所生产的ddl脚本。默认为false。
drop:            若为true,表示会生成删除数据库中表的ddl脚本。默认为false。
create:          若为true,表示会生成创建数据库中表的ddl脚本。默认为false。
outputfilename: 指定存放ddl脚本的文件。
update:          若为true,表示会对比现有数据库及映射文件,生成用于增量更新数据库的ddl。默认为false。
haltonerror:    若为true,表示遇到错误时会终止运行ant工程。默认为false。
format:          设定ddl脚本中SQL语句的格式。
delimiter:       为ddl脚本设置行结束符。
console:         若为true,表示会在控制台显示生成的ddl脚本。默认为true。

使用xml配置hibernate。通常命名为hibernate.cfg.xml
<hibernate-configuration>
  <session-factory>
     <property name="dialect">
        org.hibernate.dialect.MySQLDialect</property>

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

     <property name="connection.url">
         jdbc:mysql://localhost:3306/dbName</property>
    
     <property name="connection.username">root</property>
     <property name="connection.password">tiger</property>
     <property name="show_sql">true</property>

     <mapping resource="xxx.hbm.xml"  />

  </session-factory>
</hibernate-configuration>

若Hibernate的配置文件为java属性文件,必须以编程方式声明需要加载的映射文件,xml则不必调用。
    SessionFactory sessionFactory = new Configuration()
          .addClass(xx.class).buildSessionFactory();
默认情况下,Hibernate不会加载hibernate.cfg.xml文件,必须通过Configuration的configure()方法来显式加载hibernate.cfg.xml文件。 
    SessionFactroy sessionFactory = new Configuration()
          .configure().buildSessionFactory();

持久化类使用JavaBean的风格,为需要被访问的属性提供get和set方法,这两个方法也称为持久化类的访问方法。

为什么hibernate中持久化对象要有set和get方法?
java应用程序调用对象的get方法读取外界信息后调用set方法,把信息存到对象中;Hibernate调用对象的get方法读取对象信息后存到数据库调用set方法把数据从数据库中独取出来后存到对象中。Hibernate可以访问任何级别的get、set方法。

基本数据类型的缺点在与无法表达null值;包装类型的默认值是null。
在对象-关系映射文件中,<property>元素的access属性用于指定Hibernate访问持久化类的属性方式。access有一下两个值可选:property:默认值,表明hibernate通过相应的get和set方法来访问类的属性。field属性表明Hibernate运用java反射机制直接访问类的属性,不需get和set方法。


在SQL语法中,标识符是指用于为数据库表、视图、字段或索引等明名的字符串,常规标识符不包含空格,也不包含特殊字符;若数据库表名或字段名中包含空格,或包含特殊字符,则可以使用引用标识符。'xxx xx'

创建数据库的命名策略:实现Hibernate的org.hibernate.cfg.ImprovedNamingStragegy接口。它提供了两个参考实现类:org.hibernate.cfg.DefaultNamingStragegy类(默认实现类);org.hibernate.cfg.ImproveNamingStragegy类(高级实现类)。

你可能感兴趣的:(Hibernate,hbm2ddl)