5.4 创建 Hibernate Java 表映射
这个部分展示了使用 MyEclipse Hibernate工具来反向工程生成 Java 数据对象并从现有的数据库表格生成映射的过程.
选项 | 描述 |
Java src folder |
选中映射文件, POJO 和 DAO 生成后所在的项目和源码文件夹. |
Java package |
映射文件, POJO 和 DAO 生成后所在的包. |
Hibernate mapping file |
从选中的表格生成映射文件. |
Update hibernate configuration |
将生成后的映射文件添加到 Hibernate 配置文件中. |
Java Data Object |
为映射文件和表格生成对应的数据对象 (POJO). |
Create abstract class |
为每个数据对象生成一个抽象的父类. 这个抽象类将在以后的重新生成过程中覆盖掉, 但是对应的子类将不会被覆盖掉. |
Base persistence class |
如果需要的话, 输入生成的 POJO 所要集成的父类的完整名称. |
Java Data Access Object |
生成便于访问映射后的类和表格的数据访问对象. 用户可以在 Basic, Spring 和 JNDI DAO 中选择一种. |
Generate precise findBy methods |
为映射类中的每个属性生成一个 "findBy" 方法. |
Use custom templates |
覆盖 MyEclipse 的内部 velocity 模版为你自己的版本. |
Template directory |
包含了自定义模版的目录树的根节点. |
图 14. Hibernate Reverse Engineering 向导 - 第 2 页
选项 | 描述 |
Rev-eng settings file |
这个文件包含了反向工程的配置和选项以供以后使用. 点击 Setup... 按钮来选择现有的文件或者创建一个新的文件. |
Custom rev-eng strategy |
允许你指定一个自定义的反向工程策略类. 这个类允许你用编程的方式来自定义反向工程处理过程的各个方面. 参考 使用自定义反向工程策略 来获取详细信息. |
Type Mapping |
决定是否在类型映射属性中使用 Java 或者 Hibernate 类型, 例如 java.lang.String 对应 string. 这个设置只能在向导第 3 页的 Customized Type Mappings 列表中没有指定更多信息时才能使用. |
ID Generator |
ID Generator 是 Hibernate 映射文件必须有的内容. 它定义了持久类实例的唯一主键生成器 Jaav 类. 参考 资源 部分里面的 Hibernate 文档链接, 里面描述了每个 ID 生成器的详细信息. |
Generate basic typed composite IDs |
如果数据库表格包含有多个列的主键, 将总是使用 <复合主键> 映射. |
Generate version and timestamp tags |
如果启用, 名为 "version" 和 "timestamp" 的列将会在生成的映射文件中作为 <version> 和 <timestamp> 标记出现. |
Customized Type Mappings |
允许你来指定一个自定义的 JDBC 类型到 Hibernate 类型的转换, 使用 Length, Scale, Precision 和 Nullability 作为精度控制对应原来的 JDBC 类型. |
选项 | 描述 |
Class name |
对应当前数据库表格的数据对象类的完整名称. |
ID Generator |
想要对当前表所使用的 ID 生成器. |
JDBC type |
对当前列所使用的 JDBC 类型覆盖. |
Property name |
对应当前列所生成的属性名. |
Hibernate type |
对应当前列的 Hibernate 类型. |
Include referenced / referencing tables |
包含反向工程时当前数据库表引用的表格以及其它引用到当前表的数据库表. |
Generate support for ListedTable(fk)->UnlistedTable and UnlistedTable(fk)->ListedTable |
生成关联到当前表格的关联表的尚未反向工程过的代码, 这些表在当前配置页面尚未被显示. |
在这个向导完成之后将会进行下面所列的操作:
图 15 高亮显示了所生成的类, 关键方法和映射文件, 以及被添加到 hibernate.cfg.xml 文件中的对生成的映射文件的引用.
图 15. Hibernate 反向工厂向导执行结束后更新过的项目内容
—————————————————————————————————————————————————————————————
下载并解压缩 这个文件到你的电脑的文件系统上.按照 README.txt 文件中的说明来自定义这个模版.调用反向工程向导, 在第 1 页选择启用 Use custom templates 选项, 然后将 Template directory 指向到包含模版树的文件夹e.5.6 使用自定义反向工程策略
向你的项目中添加 MyEclipse Persistence Tools 类库.
MyStrategy.java |
package com.genuitec.hibernate; import org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy; import org.hibernate.cfg.reveng.ReverseEngineeringStrategy; import org.hibernate.cfg.reveng.TableIdentifier; public classMyStrategy extendsDelegatingReverseEngineeringStrategy { publicMyStrategy(ReverseEngineeringStrategystrategy) { super(strategy); } publicString columnToPropertyName(TableIdentifier table, String columnName) { return"ME_" + super.columnToPropertyName(table, columnName); } } |
MyEclipse 包含了定制过的 XML 编辑器来专门用于修改 Hibernate映射文件 (*.hbm.xml). 当双击映射文件的时候编辑器将会自动打开. 你也可以通过右键点击文件然后选择 Open With > MyEclipse Hibernate Mapping Editor.
功能
图 19. Hibernate 映射文件编辑器
—————————————————————————————————————————————————————————————
MyEclipse 包含了一个 Hibernate 查询语言编辑器以及几个视图, 允许你根据当前的 Hibernate 配置来执行 HQL 查询语句.
功能
注意: 如果你在 HSQL 编辑器为特定的项目初始化后修改了配置, 映射文件或者数据类, 一定要记得点击嵌入的工具栏上的 Refresh 按钮来让编辑器使用最新的配置信息.
—————————————————————————————————————————————————————————————
既然 Hibernate 持久化功能已经整合进了 HibernateDemo 项目, 接下来的步骤就是对它进行测试. 一种测试 Hibernate 持久化功能的方法是创建一个带 main 方法的 Java 类. 测试类将使用 Hibernate 向导所生成的 Java 对象和 HibernateSessionFactory. 请查看图 18 中所示的 HibernateSessionFactory 类中所生成的两个重要的方法, 在测试代码中将会使用这两个方法.
|
显示了 HibernateSessionFactory 中的两个重要的静态方法. getSession(): 这个方法将会返回一个 Session 变量, 可以用来访问 Hibernate Session 类. 任何时间你想使用 Hibernate 会话的时候你都可以调用这个方法来获取缓存过的这个 Hibernate 会话对象. closeSession(): 如果一个会话已经启动过, 这个方法就简单的关闭它. |
下面是创建测试类源代码的步骤列表:
HibernateReadTest.java |
package com.genuitec.hibernate; import org.hibernate.HibernateException; public class HibernateReadTest { public static void main(String[] args) { // Step 1 - Create the DAO EchoMessageDAO dao = new EchoMessageDAO(); try { // Step 2 - Use findById to retrieve the message with ID = 1 EchoMessage echoMessage = dao.findById(new Long(1)); System.out.println("Entity retrieval successful, message is: " + echoMessage.getMsg()); } catch (HibernateException e) { System.err.println("Entity retrieval failed."); e.printStackTrace(); } finally { try { dao.getSession().close(); } catch (Exception e) { // do nothing } } } } |
8. 使用示例
HibernateDemo 项目下载 HibernateDemo.zip选择 Import > Existing Projects into Workspace, 选中 Select archive file 选项然后指向下载的 zip 文件. 点击 Finish 来导入到你的 Eclipse 工作台.需要做以下修改来重新配置这个项目和你的开发环境保持一致. 从你的数据库复制 JDBC 驱动 JAR 文件到项目中. 通过右键点击文件然后选择 Build Path > Add to Build Path 来将它添加到项目的构造路径中. 连接到你的数据库然后执行 DDL/DDL.sql 文件中的代码来创建示例数据库并填充里面的值.
在执行之前, 也许需要修改表格的数据库前缀并使它和你的数据库的 DDL 规范一致. 修改配置文件 hibernate.cfg.xml , 将里面的连接设置修改为你自己的数据库配置.HibernateWriteTest.java 是一个简单的演示类来展示 DAO 是如何写入数据到数据库的.
—————————————————————————————————————————————————————————————
9. 总结使用 MyEclipse 进行 Hibernate 开发的教程到此结束. 我们还有更多的快速入门文档, 包括如何使用 DatabaseExplorer, Struts, JSF, Web Projects, 修改, 应用服务器配置, EJB 开发, 以及企业应用项目. 更多信息请访问 MyEclipseQuickstart library .
—————————————————————————————————————————————————————————————
10. 用户反馈如果你对本文有评论或者建议, 请提交到 MyEclipseDocumentation Forum .
—————————————————————————————————————————————————————————————
11.资源
HibernateDemo 示例项目MyEclipse Reverse-Engineering 模版