`
longgangbai
  • 浏览: 7339575 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate正向工程hbm2ddl

阅读更多

       一般在项目开发过程中,使用比较多的就是先建好表,再利用hibernate反向工程生成*.hbm.xml文件跟POJO类,个人认为由于目前所使用的数据库都是关系数据库,而hibernate作为一个ORM,把对数据库的操作都对象化了,更应当从对象出发,生成数据库里面相关表,这样更加符合人认知事物的习惯。

 

             由于hibernate3提供了自带的工具hbm2ddl,建立根据你的对象建立数据库是一件非常简单的事情。

           

            SchemaExport工具:Hibernate的hbm2dll提供SchemaExport工具,给定一个连接字符串和映射文件,不需输入其他东西就可以按照持久化类和映射文件自动生成数据库架构,现在SchemaExport工具还不是很强大,但是一般应用足够了,它还是一个相当原始的API还在不断改进。SchemaExport工具就是把DDL脚本输出到标准输出,同时/或者执行DDL语句。SchemaExport工具提供了三个方法,分别是Drop()、Create()、Execute(),前两个方法实质是调用Execute()方法。通常使用Execute()方法来生成数据库架构的。

 

               SchemaUpdate工具:在Hibernate2.0中新添加SchemaUpdate工具,可以用来更新数据库架构。但是我觉得没有什么作用,因为它不能Drop现有的表或列,也不能更新现有的列,只能添加新的表和列。如果我需要删除表或者列或者修改其中列,SchemaUpdate工具就显得无能为力了。

          

            SchemaValidator工具:SchemaValidator工具,可以用来检查数据库架构。通过映射文件中配置的相关数据库表及各自的字段属性来检查数据库中对应表结构是否存在或正确,如果不存在表或字段不一致,则抛出异常。

 

             对于单纯的Hibernate,配置有hibernate.cfg.xml数据库配置文件,或是其它SSH整合版本中也配置有相关.cfg.xml文件的工程来说,这种类型的情况下使用Hibernate的SchemaExport实现正向工程比较简单。如下例:

 

public boolean createTableByBean(String mappingFile) {

       Configuration cfg = new Configuration().configure(cfgFile);

       cfg.addFile(mappingFile);

       boolean flag = true;

       SchemaExport dbExport = new SchemaExport(cfg);

       try {

           dbExport.create(true, true);

       } catch (Exception e) {

           flag = false;

       }

       return flag;

}

而我所做的数据迁移工具中使用的是Spring+Hibernate整合框架,而且在数据库配置中没有使用hibernate.properties和hibernate.cfg.xml文件来配置,

因为在使用Hibernate的SchemaExport/SchemaUpdate/SchemaValidator工具时,构建对象时需要Hibernate的Configuration对象实例作为参数。如:

var export = new SchemaExport(cfg); 其中cfg参数由

Configuration cfg = new Configuration().configure(cfgFile);建立,configure默认读取hibernate.cfg.xml配置文件(configure无参函数),

也可以通过传递参数指定自己定义的.cfg.xml文件。我的SessionFactory是借助于Spring提供的

org.springframework.orm.hibernate3.LocalSessionFactoryBean来实现的:

<bean id="targetSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

    ……

 </bean>

在没有配置.cfg.xml文件的情况下,可以通过配置的数据源的SessionFactory中获取,如下:

public class DaoUtil extends HibernateDaoSupport {

private Configuration cfg;

private Settings settings;

public void init() {

     String webRootPath = CommonMethod.getWebRootPath();

     ApplicationContext dataSource_ctx = new FileSystemXmlApplicationContext(webRootPath + "/WEB-INF/datatransferConf/applicationContext-targetDataSource.xml");

     SessionFactoryImplementor sessionFactoryImpl = (SessionFactoryImplementor) dataSource_ctx.getBean("targetSessionFactory");

     LocalSessionFactoryBean localSessionFactory = (LocalSessionFactoryBean) dataSource_ctx.getBean("&targetSessionFactory");

     SessionFactory sessionFactory = (SessionFactory) dataSource_ctx.getBean("targetSessionFactory");

     this.cfg = localSessionFactory.getConfiguration();

     this.settings = sessionFactoryImpl.getSettings();

     super.setSessionFactory(sessionFactory);

}

public void createTableFromCfg() {

      if (settings.isAutoCreateSchema()) {

         new SchemaExport(cfg, settings).create(true, true);

      } else if (settings.isAutoUpdateSchema()) {

            new SchemaUpdate(cfg, settings).execute(true, true);

        } else if (settings.isAutoDropSchema()) {

          new SchemaExport(cfg, settings).drop(true, true);

        } else if (settings.isAutoValidateSchema()) {

          new SchemaValidator(cfg).validate();

        }

}

public void createTableFromMapFile(String mappingFile) {

      Resource mappingLocation = new ClassPathResource(mappingFile);

              try {

         cfg.addInputStream(mappingLocation.getInputStream());

     } catch (MappingException e1) {

         e1.printStackTrace();

     } catch (IOException e1) {

         e1.printStackTrace();

     }

     createTableFromCfg();

 }

}

 

SchemaExport 的create(script,export)方法根据持久类和映射文件先删除架构后创建删除数据库架构。有两个参数,第一个为True就是把DDL语句输出到控制台,第二个为True就是根据持久类和映射文件先执行删除再执行创建操作,经过调试可以发现这个方法其实质是执行execute(script,export, false, true)方法。execute(script, export, justDrop, format)方法根据持久类和映射文件先删除架构后创建删除数据库架构。有四个参数,第一个为True就是把DDL语句输出到控制台;第二个为True就是根据持久类和映射文件在数据库中先执行删除再执行创建操作;第三个为false表示不是仅仅执行Drop语句还执行创建操作,这个参数的不同就扩展了上面两个方法;第四个参数为false表示不是格式化输出DDL语句到控制台,是在一行输出的。

 

Spring配置文件中所定义的LocalSessionFactoryBean实现了org.springframework.beans.factory.FactoryBean接口,在使用ApplicationContext对象读取的时候可以自动转型为多种不同类型的SessionFactory,spring在装配的时候, 如果发现实现了org.springframework.beans.factory.FactoryBean接口,就会使用

FactoryBean#getObject() 方法返回的对象装配,具体的可以看下文档。如果你想拿到LocalSessionFactoryBean实例, 在id前面加个'&'就可以了,在你的配置文件中BeanFactory.getBean('&sessionFactory')拿到的就是LocalSessionFactoryBean的实例。

 

分享到:
评论

相关推荐

    hibernate.hbm2ddl.auto属性详解

    详解hibernate.hbm2ddl.atuo 属性的配置

    hibernate3 配置hbm2ddl和hbm2java所需jar

    - hibernate-tools.jar:这个库包含了hbm2ddl和hbm2java工具以及其他辅助工具,如逆向工程(reverse engineering)等功能。 - jboss-logging.jar:提供日志记录服务,Hibernate使用这个库进行内部的日志输出。 - dom...

    hbm2ddl属性hbm2ddl属性

    `hbm2ddl`(Hibernate to Database Mapping and Data Definition Language)属性是Hibernate配置文件中的一个关键选项,它决定了Hibernate如何处理数据库表结构。通过设置不同的`hbm2ddl`属性值,开发人员可以灵活地...

    hibernate正向工程和逆向工程

    - 在`hibernate.cfg.xml`配置文件中设置数据库连接信息,并将`hibernate.hbm2ddl.auto`设置为`create`,重启Tomcat即可根据映射文件生成数据库表。 #### 三、逆向工程 逆向工程则是指从已有的数据库表结构出发,...

    hibernate正向工程和方向工程

    ### Hibernate 正向工程与逆向工程详解 #### 一、Hibernate正向工程 ##### 定义 Hibernate正向工程是指从Java实体类生成数据库表的过程。这种方式更符合Java程序员面向对象的编程思想,也是软件工程设计时常用的...

    利用Middlegen Hibernate3生成hbm.xml配置和java类

    标题中的“利用Middlegen Hibernate3生成hbm.xml配置和java类”指的是使用Middlegen工具来自动化创建Hibernate3框架所需的映射文件(hbm.xml)和对应的Java实体类。这个过程是数据库对象到Java对象(O/R Mapping)的...

    用Hibernate自带的工具(DDL2java).doc

    - 选择使用注解的方式进行配置,这通常是在配置文件中的`&lt;property name="hbm2ddl.auto"&gt;update&lt;/property&gt;`设置,同时在`&lt;mapping&gt;`元素中指定注解的类。 4. **添加MySQL驱动依赖**: - 在项目的类路径中添加...

    利用hibernate自动生成hbm.xml文件和entity类.doc

    Hibernate 反向工程是指使用 Hibernate 工具将数据库表结构反向生成对应的 Entity 类和 hbm.xml 文件的过程。这种方法可以大大简化开发过程,提高开发效率。 二、 Hibernate 反向工程的步骤 1. 切换到 MyEclipse ...

    详解hibernate自动创建表的配置

    首先,我们要关注的关键配置项是`hibernate.hbm2ddl.auto`。这个属性决定了Hibernate在启动时如何处理数据库的元数据,即表结构。以下四个值是它可能的取值: 1. **update**:这是最常用的设置,当设置为`update`时...

    hibernate01:概念、正向工程、反向工程

    **标题:“Hibernate01:概念、正向工程、反向工程”** 在Java开发领域,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发者可以更加专注于业务逻辑而非繁琐的SQL语句。本文...

    根据hibernate配置文件生成数据库.zip

    本压缩包“根据hibernate配置文件生成数据库.zip”包含了一些关键资源,帮助开发者理解如何使用Hibernate工具hbm2ddl自动生成数据库结构。以下是对这些资源的详细解释: 1. **使用Hibernate的工具hbm2ddl根据你的...

    正向工程创建hbm.xml,以及javadoc模式的读取注释

    Hibernate,作为一款流行的ORM框架,允许开发者通过正向工程自动生成hbm.xml文件,这是一种描述Java对象与数据库表之间映射关系的XML文件。在本主题中,我们将深入探讨如何利用正向工程创建hbm.xml文件,并了解如何...

    hibernate.hbm.xml详解

    《hibernate.hbm.xml详解》 在Java的持久化框架Hibernate中,`hibernate.hbm.xml`文件是至关重要的,它定义了Java对象与数据库表之间的映射关系,使得对象模型能够与关系型数据库无缝对接。这篇文章将深入解析`...

    Hibernate-tools解决hbm.xml中文注释乱码和生成实体类注释

    `Hibernate-tools`是Hibernate项目提供的一组实用工具,它包括了代码生成、反编译数据库模式到`hbm.xml`文件、JPA实体类生成等功能。在5.2.1版本中,这个工具集已经相当成熟,可以很好地支持各种定制需求。 1. **...

    hibernate反向工程模板(已修改)

    其中,反向工程(Reverse Engineering)是Hibernate提供的一项功能,它能根据数据库结构自动生成对应的Java实体类、持久化映射文件(hbm.xml)以及数据访问对象(DAO)。本文将围绕"hibernate反向工程模板(已修改)...

    Hibernate反向工程

    2. **逆向工程原理**:Hibernate的反向工程是从现有数据库中提取表结构,并自动生成对应的Java实体类、Hibernate配置文件(hbm.xml)以及映射文件。这些文件包含了数据库表字段与Java对象属性之间的对应关系,以及...

    Hibernate常用操作示例

    Hibernate常用操作示例,包含详细注释说明,数据库初始化文件。使用和学习请参考:http://blog.csdn.net/daijin888888/article/details/51692942

    ssh项目中hbm2dll和hbm2java的使用

    -- hbm2ddl task (not shown here, but would be similar) --&gt; ``` 在这个例子中,`hibernatetool`任务被用来调用`hbm2java`,并将生成的Java文件放入`build.dir`目录下。类似的,`hbm2ddl`任务可以用于生成数据库...

    自动生成Hibernate类文件和hbm.xml文件

    通过myeclipse自动生成Hibernate类文件和hbm.xml文件,链接数据库库自动生成

Global site tag (gtag.js) - Google Analytics