热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hibernate实战笔记14:深入解析反向工程技术

在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合Hibernate规范的配置文件,从而加速项目的启动和开发周期。

反向工程遗留数据库


      当映射遗留数据库时,第一步可能涉及一个自动的反向工程过程。毕竟,实体Schema已经存在于你的数据库系统中。为了使这项工作更容易些,Hibernate配有一组工具,可以从这个元数据(包括XML映射文件和Java源代码)中读取Schema,并生成各种需要创建的东西。所有这些都是基于模板的,因此许多定制工作成了可能。
我们将首先介绍如何编写一个可以把现有的数据库加载到Hibernate元数据模型中的Ant目标。

创建数据库配置


要从现有的数据库中生成映射和代码,首先需要创建一个包含数据库连接设置的配置文件:

hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver
hibernate.connection.url=jdbc:oracle:thin:@localhost:1521:orcl
hibernate.connection.username=system
hibernate.connection.password=bdqn
hibernate.dialect=org.hibernate.dialaect.OracleDialect      直接把这个文件保存在项目下,并命名为helloworld.db.properties。这里显示的五行是连接到数据库并读取所有表和列所需的最少代码。你可能已经创建了一个Hibernate XML配置文件,而不是helloworld.db.properties,但是没有必要把这弄得比需要的更复杂。
接下来编写Ant目标。在项目的一个build.xml文件中,添加下列代码:










      Ant的这个HibernateToolTask定义和以前的一样。假设你将重用前面章节中介绍过的大部分构建文件,并且如project.classpath这样的引用也是一样的。
是一个Hibernate工具配置,可以通过JDBC连接到数据库,以及从数据库目录中读取JDBC元数据。通常用两个选项对它进行配置:数据库连接(属性文件)和一个可选的反射工程定制文件。
      然后,由工具配置生成的元数据被导入到导出器。这个范例的Ant目标命名了这样两个导出器:hbm2hbmxml导出器,就像你能从它的命名中猜到的那样,它从配置中取出Hibernate元数据(hbm),并生成Hibernate XML映射文件;第二个导出器可以生成一个hibernate.cfg.xml文件,该文件列出所有生成的XML映射文件。
在谈论这些以及各种其他的导出器之前,要花点时间讨论反射工程定制文件以及如何使用它。

定制反向工程


      JDBC元数据——也就是说,你可以通过JDBC从一个数据库中读取有关它自身的信息——通常不足以创建一个完美的XML映射文件,至于Java应用代码更不必说了。可以用一个使用XML语法的反向工程配置文件定制反射工程的过程。
helloworld.reveng.xml文件


"http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd">













      如果现在使用这个定制运行Ant目标,它就会在源目录的hello包中生成Message.hbm.xml文件。(首先要把Freemarker和jTidy JAR文件复制到你的库目录里面)。

生成Java源代码


      可以使用在Ant构建中的Hibernate Tools和hbm2java导出器生成用于实体类的源代码。这个源工具可以是任何能够被读进Hibernate元数据模型的东西——如果你想要定制Java代码生成,Hibernate XML映射文件是最好的。
把下列目标添加到Ant构建:











读取所有的Hibernate XML映射文件,导出器通过默认的策略生成Java源代码。

生成Java Persistence实体类


      一般地,在实体类源代码中使用Hibernate XML映射文件或者JPA注解来定义映射元数据,因此从XML映射文件中生成包含注解的Java Persistence实体类不太合理。然而,可以直接从JDBC元数据中创建包含注解的实体类源代码,并跳过XML映射步骤。看看下列Ant目标:








      这个目标生成包含映射注解的实体类源代码和列有这些被映射类的hibernate.cfg.xml文件。可以直接编辑Java源代码来定制映射,如果在反向工程自定义文件中定制太受限制的话。
      还要注意所有的导出器都依赖于以FreeMarker模板语言编写的模板。可以用任何喜欢的方式定制模板,甚至可以编写自己的模板。
Hibernate Tools提供的其他导出器和配置如下:
取代一般的,如果你想要从被注解的Java类中读取映射元数据,而不是从XML映射文件中读取的话。它唯一的实参是包含一列已注解类的hibernate.cfg.xml文件的位置和名称。使用这种方法从被注解的类中导出一个数据库Schema。
相当于,除了它可以自动在classpath中扫描被注解的Java类之外;它不需要hibernate.cfg.xml文件。
导出器可以基于数据访问对象模式,给持久层创建额外的Java源代码。
导出器生成给表和Java实体提供文档的HTML文件。
导出器可以用一组定制的FreeMarker模板参数化,Hibernate Tools捆绑了利用JBoss Seam框架来生成完整的、可运行的骨架应用程序的框架。

Hibernate实战_笔记14(反向工程),布布扣,bubuko.com


推荐阅读
  • HDU1176:免费馅饼问题的动态规划解法分析
    题目“免费馅饼”通过动态规划方法进行了解析。该问题的时间限制为 Java 2000ms 和其他语言 1000ms,内存限制为 Java 65536K 和其他语言 32768K。本文详细探讨了如何利用动态规划算法高效求解此问题,并对算法的时间复杂度和空间复杂度进行了深入分析。此外,还提供了具体的实现步骤和代码示例,帮助读者更好地理解和应用这一方法。 ... [详细]
  • CAS 机制下的无锁队列设计与实现 ... [详细]
  • 在HDU 1166敌军布阵问题中,通过运用线段树数据结构,可以高效地计算指定区间的敌军数量。该算法不仅能够在限定的时间和内存条件下快速求解,还能够灵活应对动态变化的战场局势,为实时决策提供支持。 ... [详细]
  • 为了向用户提供虚拟应用程序,通常会在基础架构中部署StoreFront或Web Interface。为了确保安全的远程访问,通常需要在DMZ中配置Secure Gateway或Access Gateway。本文详细对比了这两种界面工具的功能特性,包括用户管理、安全性、性能优化等方面,为企业选择合适的解决方案提供了全面的参考。 ... [详细]
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
  • MongoVUE基础操作指南:轻松上手数据库管理
    本文介绍了MongoVUE的基础操作,旨在帮助用户轻松掌握数据库管理技巧。MongoVUE是一款功能强大的MongoDB客户端工具,虽然需要注册,但其用户友好的界面和丰富的功能使其成为许多开发者的首选。文中详细解释了安装步骤、基本配置以及常见操作方法,并对一些常见的问题进行了修正和补充,确保用户能够快速上手并高效使用MongoVUE进行数据库管理。 ... [详细]
  • 如何在Mac上构建高效的本地服务器环境
    在Mac上构建高效的本地服务器环境,首先需要了解基本步骤:1. 配置目录基础;2. 启动Apache服务;3. 添加自定义文档至本地服务器;4. 查看自定义效果。此外,还可以通过手机或其他电脑访问本机服务器,以确保跨设备的兼容性和调试效果。Mac系统自带的Apache服务为本地开发提供了便捷的工具,本文将详细介绍每个步骤的具体操作方法。 ... [详细]
  • 在 JavaScript 中,变量前的加号(+)符号用于将变量转换为数字类型。例如,在 `if (+valueDistance) {}` 语句中,加号的作用类似于 `Number(valueDistance)`,会根据 Number 函数的规则将变量转换为数值或 NaN。这种用法常用于确保变量在进行数值运算时不会出现类型错误。 ... [详细]
  • 【Linux进阶指南】第一阶段第三课:体验与部署Ubuntu系统
    在正式踏上Linux学习之旅之前,本课程将引导你深入体验和部署Ubuntu系统。通过详细的操作步骤和实践演练,你将掌握Ubuntu的基本安装、配置及常用命令,为后续的进阶学习打下坚实的基础。此外,课程还将介绍如何解决常见问题和优化系统性能,帮助你更加高效地使用Ubuntu。 ... [详细]
  • 在学习LVM(逻辑卷管理)技术的过程中,我对MD(多设备)、DM(设备映射器)以及逻辑设备和RAID的实现有了深入的理解。LVM2架构主要由DM主模块及其多个子模块组成,其中linear子模块用于创建线性设备,类似于简单的磁盘分区拼接。此外,还探讨了其他子模块如striped、mirror等在提高性能和数据冗余方面的应用。通过实际操作,我掌握了LVM的基本配置和管理方法,能够灵活应对不同存储需求。 ... [详细]
  • 在处理大图片时,PHP 常常会遇到内存溢出的问题。为了避免这种情况,建议避免使用 `setImageBitmap`、`setImageResource` 或 `BitmapFactory.decodeResource` 等方法直接加载大图。这些函数在处理大图片时会消耗大量内存,导致应用崩溃。推荐采用分块处理、图像压缩和缓存机制等策略,以优化内存使用并提高处理效率。此外,可以考虑使用第三方库如 ImageMagick 或 GD 库来处理大图片,这些库提供了更高效的内存管理和图像处理功能。 ... [详细]
  • 如何在CAD阅图软件中将PDF文件高效转换为CAD格式?
    如何在CAD阅图软件中将PDF文件高效转换为CAD格式? ... [详细]
  • 如何设置域名默认301重定向至www前缀
    在进行域名默认301重定向至www前缀的操作前,确保你已经拥有一个有效的域名,并且该域名已正确解析到外部主机地址,能够正常访问网站。本文主要针对IIS 7及以上版本的用户,IIS 7之前的版本不适用。我们将详细介绍如何通过IIS管理器配置301重定向,确保所有请求都能自动跳转到带有www前缀的URL,从而提升网站的SEO效果和用户体验。 ... [详细]
  • 本文详细介绍了使用C++实现插入排序算法的方法,并对其进行了优化。通过具体的代码示例,解释了插入排序的基本原理和优化技巧,包括交换两个元素的函数 `SwapTwo` 的实现。此外,文章还探讨了插入排序的时间复杂度和适用场景,为读者提供了深入理解该算法的全面指南。 ... [详细]
  • vtkGlyph3D 是一种强大的符号化可视化工具,能够将三维数据集中的每个点用预定义的几何图形(如球体或箭头)进行表示。该工具不仅支持自定义符号的方向和缩放比例,还能够在复杂的数据场中突出显示关键特征,从而提高数据的可解释性和可视化效果。通过这种方式,用户可以更直观地理解和分析三维数据集中的重要信息。 ... [详细]
author-avatar
无奈中有几多Rudy
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有