MyEclipse Hibernate 映射表配置文件详解
5.4 创建 Hibernate Java 表映射
这个部分展示了使用 MyEclipse Hibernate工具来反向工程生成 Java 数据对象并从现有的数据库表格生成映射的过程.
注意: 在我们的例子里我们使用了 TEST 数据库下的 ECHO_MESSAGE 表格; 对于其它数据库和表格的操作过程基本上都是一样的.
另外, 你也可以从 DB Browser 那里拖动表格, 然后将它放到 Hibernate 配置编辑器里也可以启动这个向导.
注意: 你可以在 DB Browser 中选中多个表格然后同时对它们进行反向工程.
图 12. 对 ECHO_MESSAGE 数据库表格启动 Hibernate Reverse Engineering 向导
Hibernate Reverse Engineering 向导一共有 3 页.
图 13. Hibernate Reverse Engineering 向导 - 页面 1
选择 HibernateDemo 项目中的src 文件夹. 点击 Java package输入框右侧的 Browse... 按钮然后选中包 com.genuitec.hibernate完成如图 13 所示的向导中的其余的内容然后选择 Next.
注意: 向导的第 2 页和第 3 页用来自定义反向工程处理过程.
当然也可以现在就直接点击 Finish 按钮开始处理过程, 不对后两页的设置进行任何自定义.
表 4 - Hibernate Reverse Engineering 向导 - 第 1页
选项 | 描述 |
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 页
表 5 - 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 类型. |
再第 3 页页可以使用默认的设置, 选择 Finish 将启动反向工程处理.
图 15. Hibernate Reverse Engineering 向导 - 第 3 页
表 6 - Hibernate Reverse Engineering 向导 - 第 3页
选项 | 描述 |
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 类库.
右键点击你的项目然后选择 Properties.在 Java Build Path 页面, 在 Libraries 面板下选择 Add Library....选择 MyEclipse Libraries ,接着选中 MyEclipse Persistence Tools.点击 Finish.
图 16. 添加 MyEclipse Persistence Tools 类库
在你的项目中创建一个新类, 让这个类继承自 org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy 类.定义一个单参数的构造器, 然后覆盖其中的感兴趣的一个或者多个方法, 例如, columnToPropertyName.
这里是一个例子, 将在所有生成的属性前添加一个 "ME_" 前缀.
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); } } |
在反向工程向导的第 2 页, 选中刚才所创建的类
图 18. 指定反向工程策略5.7 编辑映射文件
MyEclipse 包含了定制过的 XML 编辑器来专门用于修改 Hibernate映射文件 (*.hbm.xml). 当双击映射文件的时候编辑器将会自动打开. 你也可以通过右键点击文件然后选择
Open With > MyEclipse Hibernate Mapping Editor.
功能
图 19. Hibernate 映射文件编辑器
—————————————————————————————————————————————————————————————
MyEclipse 包含了一个 Hibernate 查询语言编辑器以及几个视图, 允许你根据当前的 Hibernate 配置来执行 HQL 查询语句.
功能
下面的步骤将指导你如何使用 HQL 编辑器右键点击 Package Explorer 中的 HibernateDemo 项目. 在右键菜单中的 MyEclipse 项目下, 选择 Open HQL Editor...
注意: HQL 编辑器也会在你尝试查看后缀为 hql 的文件的时候打开.
图 20. 打开 HQL 编辑器
注意: 总是可以切换到这个视图, 通过选择菜单项 Window > Open Perspective > Other > MyEclipse Hibernate当编辑器打开时, 键入 "from EchoMessage" 点击 Run 图标或者按下 Ctrl + F9 来执行查询语句.
图 21. 在 HSQL 编辑器中执行查询
图 22. Query Parameters 视图
注意: 如果你在 HSQL 编辑器为特定的项目初始化后修改了配置, 映射文件或者数据类, 一定要记得点击嵌入的工具栏上的 Refresh 按钮来让编辑器使用最新的配置信息.
—————————————————————————————————————————————————————————————
既然 Hibernate 持久化功能已经整合进了 HibernateDemo 项目, 接下来的步骤就是对它进行测试. 一种测试 Hibernate 持久化功能的方法是创建一个带 main 方法的 Java 类. 测试类将使用 Hibernate 向导所生成的 Java 对象和 HibernateSessionFactory. 请查看图 18 中所示的 HibernateSessionFactory 类中所生成的两个重要的方法, 在测试代码中将会使用这两个方法.
|
显示了 HibernateSessionFactory 中的两个重要的静态方法. getSession(): 这个方法将会返回一个 Session 变量, 可以用来访问 Hibernate Session 类. 任何时间你想使用 Hibernate 会话的时候你都可以调用这个方法来获取缓存过的这个 Hibernate 会话对象. closeSession(): 如果一个会话已经启动过, 这个方法就简单的关闭它. |
下面是创建测试类源代码的步骤列表:
图 24. 新建 Java 测试类
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 } } } } |
这是, Console 视图将会打开, 如果测试成功的话你将会看到如下面的 图 21所示的输出内容.
注意: 如果你看到了 log4j 警告, 你可以忽略它们即可.
图 26. HibernateReadTest Console 输出
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 , 将里面的连接设置修改为你自己的数据库配置.还可能需要修改 EchoMessage.hbm.xml 来修改 class 元素里面指定的 schema 属性为对应的数据库名称. 一些其它的文件已经包含在这里:
log4j.properties 用来控制 log4j 类库里面的日志等级.
ehcache.xml 用来控制 ehcache 类库.
HibernateWriteTest.java 是一个简单的演示类来展示 DAO 是如何写入数据到数据库的.
—————————————————————————————————————————————————————————————
9. 总结使用 MyEclipse 进行 Hibernate 开发的教程到此结束. 我们还有更多的快速入门文档, 包括如何使用 DatabaseExplorer, Struts, JSF, Web Projects, 修改, 应用服务器配置, EJB 开发, 以及企业应用项目. 更多信息请访问 MyEclipseQuickstart library .
—————————————————————————————————————————————————————————————
10. 用户反馈如果你对本文有评论或者建议, 请提交到 MyEclipseDocumentation Forum .
—————————————————————————————————————————————————————————————
11.资源
HibernateDemo 示例项目MyEclipse Reverse-Engineering 模版