MyEclipse数据库教程:使用Hibernate开发Persistence(一)
在开始本教程之前,请先下载并熟悉MyEclipse数据库工具。
在本教程中,将介绍如何:
在Java项目中启用Hibernate支持
创建一个Hibernate配置文件
使用自定义Session Factory
使用HQL编辑器生成Java类和数据库映射文件
1、创建一个示例数据库表
在开始本教程之前,必须设置受支持的数据库服务器,例如嵌入式Derby数据库或外部安装的数据库。对于本教程,则使用在MyEclipse中连接到数据库中创建的Oracle数据库连接配置文件。
首先,请使用以下SQL命令创建您将映射到Java类的数据库表。为方便测试,该表包括几个记录。
echo_message DDL
创建表echo_message
(
id整数PRIMARY KEY不为null,
msg VARCHAR(255)
);
插入echo_message值(1,'hello world');
插入echo_message值(2,'goodbye world');
注意:即使本教程使用Oracle,上面的说明和示例表也足够通用,可以用于任何数据库。
2、创建一个启用了Hibernate的Java项目
选择 File>New>Project>Java Project。
在“HibernateDemo”字段中键入HibernateDemo,然后单击“完成”。
右键单击HibernateDemo,然后选择MyEclipse> Project Facets> Install Hibernate Facet。
从目标运行时下拉列表中选择MyEclipse通用Java Runtime,然后单击下一步。MyEclipse 为您创建一个新的hibernate.cfg.xml文件。
注:启用Hibernate注释支持仅适用于Hibernate 3.2和3.3,Hibernate 4.x自动包含注释支持。注释支持在SessionFactory类中创建AnnotationConfiguration而不是常规Configuration。如果您要使用带注释的POJO而不是Hibernate映射文件,这一点很有必要。
单击“Java Package”字段旁边的“新建”以为session factory类创建新的软件包。键入com.myeclipse.hibernate作为程序包名称,然后单击“完成”。
单击“Next”,然后保留“ Specify数据库连接详细信息”复选框。
从DB Driver下拉列表中,选择在MyEclipse中连接数据库时创建的Oracle配置文件。这一操作将自动填充其余字段。
您可以通过单击Next添加库,或单击Finish接受默认的库。
注意:在这个阶段不需要配置文件。您无需选择概要文件,采用手动填充此页面上显示的其余详细信息。但有一点必须注意,一定要在向导完成后将JDBC驱动程序JAR文件复制到项目中。
现在,可以跳过上面执行的数据源配置,稍后使用Hibernate Configuration编辑器进行。
注意:稍后还可以通过选择File > New >Other,展开MyEclipse > Hibernate并选择Hibernate Session Factory来创建Session Factory。如果您选择将库复制到项目中,那么在完成过程中,向导在复制库和更新各种项目资源时最多可能会出现30秒钟的非活动状态。这时,需耐心等待所有操作完成,然后再采取其他措施。
完成向导将执行以下操作:
如果选择将Hibernate库(JAR)复制到项目中,则将其安装到项目中
更新项目的构建路径以包括已安装的Hibernate库
为项目创建和配置hibernate.cfg.xml文件
为您的项目创建一个自定义SessionFactory类(例如HibernateSessionFactory),以简化Hibernate会话处理。
下图突出显示了新创建的HibernateSessionFactory.java文件的重要功能。此类管理单个Hibernate Session对象,该对象由该getSession()方法延迟初始化,并由该方法刷新和释放closeSession()。在运行时,Hibernate会话创建过程必须能够在类路径上找到hibernate.cfg.xml文件。
CONFIG_FILE_LOCATION变量定义了hibernate.cfg.xml文件相对于软件包的路径,默认值由Hibernate支持向导提供。如果您重新定位 hibernate.cfg.xml文件,则必须手动修改CONFIG_FILE_LOCATION值来引用新位置,或者在使用前使用该setConfigFile()方法进行设置。
3、自定义Hibernate配置文件
完成添加Hibernate功能的向导后,hibernate配置文件将自动打开。如果在添加功能时跳过了数据源配置,那么现在需要使用以下步骤进行操作。如果您已经配置了数据源,请继续添加属性。
选择“Use JDBC Driver”选项,指定在数据库资源管理器中定义的JDBC驱动程序。如果尚未配置JDBC驱动程序,请阅读MyEclipse教程“连接到数据库”,并继续之前进行的配置。
在“Connection Profile”下拉列表中选择配置文件。如果配置了JDBC驱动程序但未配置连接配置文件,则可以单击“New profile”来创建一个新的连接配置文件。如果已经有一个连接配置文件,从下拉列表中选择它时,接下来的四个字段将自动填写。
单击 Copy JDBC Driver并添加到类路径链接。
从“Dialect”下拉列表中,为数据库选择适当的Hibernate方言。
Configuration页现在应该像这样:
您可以使用“Properties”选项来添加和编辑属性。
映射部分允许您添加项目中可能已经存在的映射文件,同时还支持从资源管理器中拖放映射文件。
下图显示的是完成上述步骤后的Hibernate配置文件源。
4、使用逆向工程进行Java表映射
由于大多数公司的Web项目都涉及到与关系数据库中现有的公司数据进行交互,所以本节重点介绍正向工程Java数据对象和来自现有数据库的映射描述符。
选择Window > Open Perspective > Other,然后选择MyEclipse Hibernate。
使用您在Hibernate配置中使用的配置文件打开数据库连接。
浏览数据库架构,直到找到要为其创建Hibernate映射的表/实体。
右键单击该表,然后选择“Hibernate Reverse Engineering”。或者从数据库浏览器中拖动表,并将它们放到Hibernate Configuration编辑器中以启动向导。
注意:您可以在数据库浏览器中选择多个表,以便同时对它们进行反向工程。
单击Java src文件夹字段旁边的浏览,查看可用的Hibernate项目和可在其中生成文件的源文件夹。在HibernateDemo项目中选择src文件夹。
单击Java软件包字段旁边的浏览,然后选择com.myeclipse.hibernate软件包。
如下所示完成向导的其余部分,然后单击“下一步”。
注意:向导的第2页和第3页的设置用于自定义逆向工程过程。无需自定义任何设置,通过单击Finish now就可以启动该过程。
位置 | 描述 |
Java src文件夹 | 生成映射文件、pojo和DAOs的项目和源文件夹。 |
Java包 | 生成映射文件、POJO和DAO的包。 |
创建POJO <> DB表映射信息 | 从所选表中生成映射文件或带注释的POJO。 |
更新hibernate配置 | 将生成的映射文件/带注释的POJO添加到Hibernate配置文件中。 |
Java数据对象 | 生成与映射文件和表相对应的数据对象(POJO)。 |
创建抽象类 | 为每个数据对象生成一个抽象超类。在后续的生成过程中,抽象类将被覆盖,但是相应的子类不会被覆盖。 |
基本持久性类 | 如果需要,生成的pojo应该扩展类的完全限定名。 |
Java数据访问对象 | 生成数据访问对象,以便访问Basic、Spring或JNDI DAOs映射的类和表。 |
生成精确的findBy方法 | 为映射类中的每个属性生成findBy方法。 例如findByFirstName(“ name”) ; |
使用自定义模板 | 用您自己的版本覆盖MyEclipse内部速度模板。更多详细信息,请查看下方“使用Templates对生成的代码进行微调”部分内容。 |
模板目录 | 包含定制模板树的根目录。 |
接受默认设置,然后单击“下一步”。
位置 | 描述 |
Rev-eng设置文件 | 该文件包含逆向工程配置和标签,并保留它们以备将来使用。单击Setup 按钮指定现有文件或创建一个新文件。在找不到该向导的情况下,向导将自动创建此文件。 |
定制修订策略 | 允许指定自定义逆向工程策略类,此类允许您以编程方式自定义逆向工程过程的各个方面。更多详细信息,请查看下方“使用自定义逆向工程策略”部分内容。 |
类型映射 | 确定在字段映射的type属性中使用Java还是Hibernate类型,例如java.lang.String vs. string。(仅在此向导第3页的“Customized Type Mappings”列表中找不到更特定的设置时,才使用此设置。) |
ID Generator | ID Generator是Hibernate映射文件中的必填字段,它定义了用于为持久类的实例生成唯一标识符的Java类。 如果未在该向导的第3页上进行空白或更具体的设置,Hibernate映射引擎会为您选择一个ID生成器。 |
生成基本类型的组合ID |
|
生成版本和时间戳标签 | 如果启用,则在生成的映射文件中,名为“version”和“timestamp”的列将表示为 |
启用多对多检测 | 确保在为进行逆向工程而选择的表之间存在多对多关系时,将检测到这些关系并生成相应的代码。 |
启用多对一检测 | 确保在为进行逆向工程而选择的表之间存在多对一关系时,将检测到这些关系并生成相应的代码。 |
定制类型映射 | 允许您使用“长度”、“比例”、“精度”和“可空性”作为JDBC类型的限定条件来指定从JDBC类型到Hibernate类型的自定义映射。 |
单击两个“Include Referenced Tables”复选框,使向导在反向工程过程中包括引用表。单击完成。
注意:选择表或列可以专门针对表或列定制逆向工程。
位置 | 描述 |
类名 | 与此表对应的数据对象类的完全限定名。 |
ID Generator | 要用于此表的ID Generator。 |
JDBC类型 | 此列的JDBC类型覆盖。 |
属性名 | 与此列对应的生成属性的名称。 |
Hibernate类型 | 与此列对应的Hibernate类型 |
包括参考/参考表 | 将要反向工程的表集扩展为该表引用的其他表以及分别引用该表的表。 |
生成对ListedTable(fk)-> UnlistedTable和UnlistedTable(fk)-> ListedTable的支持 | 生成此表与其他表的关系相对应的代码(这些表没有进行反向工程,并且不在此页面的表列表中)。 |
逆向工程执行以下操作:
创建Abstract <tablename>类。这个抽象类提供了必需的Hibernate兼容性功能,例如用于与数据库表中的列相对应的持久属性的公共getter和setter方法。
创建<tablename> Java类,它是Abstract <tablename>类的具体子类。所述<表名> 类旨直接使用附加的业务和验证逻辑进行修改,并且在后续的生成过程中不会被覆盖。
创建.hbm.xml Hibernate映射描述符。这个文件指导Hibernate如何<tablename> Java类和数据库表之间映射数据。
在hibernate.cfg.xml文件中注册<tablename> .hbm.xml映射描述符。
创建<tablename> DAO Java类。该类提供对<tablename>数据对象类的便捷性访问。
创建IBaseHibernateDAO接口和BaseHibernateDAO类。这些类对于基本DAO的功能是必需的,它们使用添加Hibernate功能时生成的Session工厂(com.myeclipse.hibernate.HibernateSessionFactory)来获取Hibernate会话。
下图突出显示了所生成的类、关键方法和映射文件,以及对hibernate.cfg.xml文件中添加的映射文件的引用。
4.1使用Templates对生成的代码进行微调
将模板文件下载并解压到、文件系统。
按照zip文件中README.txt的说明自定义模板。
调用逆向工程向导。在向导的第一页上,选择“Use Custom Templates”选项,然后在“Template Directory”字段中,指定包含您下载的模板的文件夹。
4.2使用Custom Reverse Engineering Strategy
右键单击项目,选择Properties,并选择Java构建路径。
单击Libraries标签,然后单击Add Library。
选择MyEclipse Library,单击Next,并选择MyEclipse Persistence Tools。单击Finish。
在项目中创建一个新类,来扩展org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy类。
定义单个参数构造函数,例如columnToPropertyName。以下是一个示例MyStrategy.java文件,该文件将ME_前缀添加到所有生成的属性中。
package com.myeclipse.hibernate; import org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy; import org.hibernate.cfg.reveng.ReverseEngineeringStrategy; import org.hibernate.cfg.reveng.TableIdentifier; public class MyStrategy extends DelegatingReverseEngineeringStrategy { public MyStrategy(ReverseEngineeringStrategy strategy){ super(strategy); } public String columnToPropertyName(TableIdentifier table, String columnName) { return "ME_" + super.columnToPropertyName(table, columnName); } }
在“Reverse Engineering”向导的第二页上,指定刚创建的类。
*有关本教程更多信息,请点击此处浏览>>>
想进一步了解MyEclips?知你所需,解你所惑!
想与更多人聊MyEclips?加入MyEclipse中国(官方2):742336981畅所欲言吧!
想及时获取MyEclips资讯?扫描下方二维码,MyEclips信息跟你走!