热门标签 | 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


推荐阅读
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文总结了在使用Ionic 5进行Android平台APK打包时遇到的问题,特别是针对QRScanner插件的改造。通过详细分析和提供具体的解决方法,帮助开发者顺利打包并优化应用性能。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 本文探讨了在Windows Server 2008环境下配置Tomcat使用80端口时遇到的问题,包括端口被占用、多项目访问失败等,并提供详细的解决方法和配置建议。 ... [详细]
  • 本文详细介绍如何利用已搭建的LAMP(Linux、Apache、MySQL、PHP)环境,快速创建一个基于WordPress的内容管理系统(CMS)。WordPress是一款流行的开源博客平台,适用于个人或小型团队使用。 ... [详细]
  • This pull request introduces the ability to provide comprehensive paragraph configurations directly within the Create Note and Create Paragraph REST endpoints, reducing the need for additional configuration calls. ... [详细]
  • 在成功安装和测试MySQL及Apache之后,接下来的步骤是安装PHP。为了确保安全性和配置的一致性,建议在安装PHP前先停止MySQL和Apache服务,并将MySQL集成到PHP中。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
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社区 版权所有