当前位置:文档之家› MyEclipse+Hibernate+快速入门+中文版

MyEclipse+Hibernate+快速入门+中文版

提纲1前言2准备工作3介绍4Hibernate 一览5创建HibernateDemo 项目5创建HibernateDemo Java Project5555使用模版调整生成更好的代码55编辑映射文件6使用HQL 编辑器7测试HibernateDemo 应用8使用示例HibernateDemo 项目9总结1.前言本文档基于以下环境编写:Sun JDK 1.5,Eclipse 3.2和MyEclipse 5.0.所有的截屏基于Eclipse,MyEclipse Enterprise Workbench,和Windows XP 的默认用户界面设置.如果你对本文档的介绍有阅读上的困难,请阅读用户反馈部分来了解如何向MyEclipse 文档团队提交反馈.2.准备工作下面是这个快速入门的准备工作列表:Java 2SDK,Standard Edition 1.4或者更高版本(参考来了解下载地址)Eclipse 3.2SDK (参考资源来了解下载地址)MyEclipse 5.0(参考资源来了解下载地址)选择以下可以被Hibernate 和MyEclipse Database Explorer 所支持的数据库服务器列表中的一个:MyEclipse Hibernate 快速入门中文版3.介绍这个快速入门展示了使用MyEclipse Enterprise Workbench 开发Hibernate 的基本功能,概念和技术.我们将全程带领你来开发一个非常简单的Java Hibernate 应用.对于这个教程没有包含到的问题和概念,我们推荐你去参考资源部分列出的Hibernate 资源.这个文档展示了如何进行下列工作:为Java 项目添加MyEclipse Hibernate 支持在项目中创建Hibernate 配置文件如何使用自定义的Session Factory从Database Explorer 的表定义中生成Java 类和Hibernate 数据库映射文件(.hbm )•使用HQL 编辑器创建使用Hibernate 的小测试应用注意:在使用本教程时建议您事先阅读了Database Explorer 快速入门这个教程来了解如何创建连接和元数据功能.4.Hibernate 一览Hibernate 是一个非常流行的开源的易于配置和运行的基于Java 的对象-关系映射(JORM)引擎.它提供了很丰富的功能包括:多种映射策略可迁移的持久化单个对象映射到多个表支持集合多态关联可自定义的SQL 查询AxionHypersonic DBInstantDBInterclientFirebirdODBC BridgejTDSMckoi Microsoft SQL Server Mimer SQL MySQL Oracle Pointbase PostgresQL SAPDB Sunopsis XML SybaseThinkSQLHibernate使用Java编写,是高可配置的软件包,可以通过两种配置文件格式来进行配置.第一种配置文件名字为hibernate.cfg.xml.在启动时,Hibernate查询这个XML里面的属性来进行操作,例如数据库连接字符串和密码,数据库方言(database dialect),以及映射文件位置等.Hibernate在类路径中查找这个文件.第二种配置文件是映射描述文件(文件扩展名为*.hbm),它来指示Hibernate如何来将特定的Java类和一个或者多个数据库表格中的数据进行映射. MyEclipse提供了工具来处理这两种配置文件,并且可以将它们和你对数据库和Hibernate映射的Java类的修改进行同步.Hibernate可以用在任何需要将Java对象和数据库表格中的数据进行移动的Java应用中.因此,它在开发两层和三层的J2EE应用中很有用.向你的应用中集成Hibernate包括:向你的项目中安装Hibernate核心类和依赖的JAR类库创建hibernate.cfg.xml文件来描述如何访问你的数据库为每个持久化Java类创建单独的映射描述文件更多关于Hibernate的基本和高级特性,或者如何使用Hibernate进行开发,请查看页面下方的资源部分.5.创建HibernateDemo项目这一部分描述了创建名为HibernateDemo的简单的Java项目的过程,这个项目使用Hibernate来保存文本消息到一个单独的数据库表格中.因为多数企业的网络应用都是和企业关系数据库中的数据进行交互,我们将集中精力到编写Java数据对象和映射文件到现有的数据库.我们需要映射到Java类的这个数据库表格列在下面.为了方便测试,我们已经向数据库中添加了很多测试数据.echo_message DDLCREATE TABLE echo_message(id integer PRIMARY KEY not null,msg VARCHAR(255));insert into echo_message values(1,'hello world');insert into echo_message values(2,'goodbyeworld');一般的在你进行Hibernate开发之前你需要一个能够访问的Database Explorer连接配置.在这个教程中,我们使用Oracle 数据库连接配置,这个配置在Database Explorer快速入门教程中创建.注意:尽管这个快速入门使用了Oracle,但是这些步骤和上面的表格基本上是通用的,可以在任何数据库下工作.5.1创建HibernateDemo Java Project我们先来创建一个普通的名为HibernateDemo的Java项目,这个项目读取写入数据到echo_message数据库表.12从MyEclipse菜单栏选择File>New>Project>Java Project.接着会打开New Java Project向导.13输入HibernateDemo到Project name14在Project Layout下选中Create separate source and output folders单选钮.15选择Finish来完成这个页面,如图1所示16图1.新建HibernateDemo项目5.2添加Hibernate Capabilities到HibernateDemo项目现在HibernateDemo项目已经创建,我们将添加MyEclipse Hibernate功能到这个项目.这个基于向导的处理过程执行了下面的操作:•添加Hibernate类库(JARs)到项目的类路径.•在项目中创建并配置hibernate.cfg.xml•在项目中创建自定义的Session Factory类来简化Hibernate会话处理我们通过打开MyEclipse Add Hibernate Capabilities向导来开始:17在Package Explorer中选择HibernateDemo项目Capabilities......来启动向导(参考图2).18接下来,从MyEclipse菜单栏选择MyEclipse>Add Hibernate Capabilities图2.启动"Hibernate Support"向导图3.添加Hibernate支持到Java项目19保持Hibernate3.1specification选中不变.20选择你需要的类库集合,在这个示例中Core类库足够了. 21保持Add checked Libraries to project build-path选中.22选择Next.表-1.Hibernate Support 向导-第1页选项23第2页允许你自定义配置文件的名字和路径.图4.Hibernate 配置文件设置24保持New 选中.25完成图4中显示的页面然后选择Next.选项描述Hibernate Specification要添加到项目中的Hibernate 版本支持功能.为了最大限度的使用MyEclipse Hibernate 工具,推荐Hibernate 3.1.MyEclipse/User Libraries可以添加到你的项目的构造路径的类库集合.Add checked Libraries to projectbuild-path选中的类库将会添加到你的项目的构造路径中,但是相应的JAR 文件将不会复制到你的项目中.这些JAR 文件将会在发布程序时复制,这是推荐的设置方式.Copy checked Library Jars to projectfolder and add to build-path选中的类库JAR 文件将会被复制到你的项目并添加到构造路径中去.Library Folder 仅在上面的选项选中时可用.一个相对于项目的路径,可以新建或者使用现有目录,Hibernate 类库将会被向导复制到这里.图5.Hibernate数据库配置26保持Specify datasource connection details?选中.27选中Oracle配置,这个配置在Database Explorer快速入门设置过,通过DB Profile下拉框选择.这将自动填充当前页面中的所有输入框.注意:在这里数据库配置并非必须的;你可以手工输入所有需要的信息,不需要选择一个配置.在这种情况下,你必须确保在向导完成后手工复制JDBC驱动JAR文件到你的项目中.28选择Next.上面进行的数据源配置操作可以现在跳过,可以在随后的Hibernate Configuration编辑器中进修改.项目的最后一步是配置一个SessionFactory类,这个类将会访问Hibernate功能所生成的基础代码.本向导的截屏如图6所示.图6.创建SessionFactory 详细信息表3-Hibernate Support 向导-第3页选项29选中Create SessionFactory class .30选中包输入框右侧的New 按钮然后创建包com.genuitec.hibernate .31给Session Factory 类输入一个名字,我们使用默认推荐的HibernateSessionFactory .32完成如图6所示的页面,然后选择Finish .注意:Session Factory 也可以在稍后创建,通过Session Factory 向导来完成(File >New >Other MyEclipse >Hibernate >Hibernate Session Factory).如果你在第一页选中了复制类库到你的项目中,在向导完成之后的至多30秒内可能失去反应,因为它将复制类库并更新多种项目资源.请耐心等待并在进行其它操作之前等待过程的结束.这个向导结束后将进行下列操作:•如果在第一页选择了复制类库到你的项目,将安装Hibernate 类库(JARs)到项目中•更新项目的构造路径来包含已安装的Hibernate 类库选项描述Create SessionFactory Class?如果启用,向导将会创建一个Hibernate 会话工厂的新类.Java source folder决定新类将被创建到的源代码目录.Java package指定Session 工厂将被创建到的包名.Class name指定Session 工厂类的名字.Java Compliance Level生成的Session 工厂类的Java 编译器等级.•给项目创建并配置hibernate.cfg.xml文件•为你的项目创建一个自定义的SessionFactory类(例如HibernateSessionFactory)来简化Hibernate会话会话处理图7高亮显示了新创建的HibernateSessionFactory.java文件里面的重要功能.这个类管理了一个单独的Hibernate Session对象,通过getSession()方法进行延迟加载并且在调用closeSession()方法之后刷新并释放数据.在运行的时候,Hibernate会话创建过程必须要能够访问类路径里面的hibernate.cfg.xml文件.变量CONFIG_FILE_LOCATION 定义了文件hibernate.cfg.xml相对于包的路径.默认值通过Hibernate支持向导来提供.如果你改动了hibernate.cfg.xml文件的位置,你必须手工修改CONFIG_FILE_LOCATION的值来引用到新的文件的位置或者可以通过在使用之前调用setConfigFile()方法来设置为新的路径.图7.HibernateSessionFactory类5.3自定义Hibernate配置文件完成了5.2部分的配置向导后,Hibernate配置文件将会自动打开.如果你在添加功能过程中跳过了数据源连接的配置,你可以现在来完成它,也可以跳转到添加属性.自定义配置文件里面的需要连接到我们的数据库的信息.33选中Use JDBC Driver选项.我们将指定Database Explorer中的JDBC驱动.如果你尚未配置JDBC驱动,请阅读Database Explorer快速入门然后在进行下面的操作之前配置一个.34从Connection Profile下拉框中选中一个配置.如果你只是配置了JDBC驱动但是没有配置一个连接属性,你可以选择New Profile按钮来创建一个新的连接配置.如果你已经有了一个连接配置,当你选择其中的一个之后将会自动填充下面的4个输入框中的内.35点击Copy JDBC Driver and add to classpath...链接.36为你的数据库选中正确的Hibernate Dialect.你的配置页面将会显示为这样的内容:你可以使用Properties部分来添加和修改属性.图9.添加属性Mappings部分可以让你添加也许已经存在项目中的映射文件.另外,从Package Explorer拖放映射文件到这个输入框也可以达到同样的效果.图10.添加映射文件图11上述操作完成后的Hibernate配置文件的源代码.图11.Hibernate配置文件5.4创建Hibernate Java表映射这个部分展示了使用MyEclipse Hibernate工具来反向工程生成Java数据对象并从现有的数据库表格生成映射的过程.打开MyEclipse Hibernate透视图.从主菜单栏,选中Window>Open Perspective>Other>MyEclipse Hibernate选中你在Hibernae配置中所使用的数据库连接属性浏览数据库的目录结构,直到你找到了一个想要创建Hibernate映射的表格/实体注意:在我们的例子里我们使用了TEST数据库下的ECHO_MESSAGE表格;对于其它数据库和表格的操作过程基本上都是一样的.右键点击表格然后选中Hibernate Reverse Engineering,如图12所示.这将启动Hibernate Reverse Engineering向导.另外,你也可以从DB Browser那里拖动表格,然后将它放到Hibernate配置编辑器里也可以启动这个向导.注意:你可以在DB Browser中选中多个表格然后同时对它们进行反向工程.Hibernate Reverse Engineering向导一共有3页.图13.Hibernate Reverse Engineering向导-页面137点击Java src folder右侧的Browse...按钮来查看可用的Hibernate项目以及源码目录,这些目录将用来存放最终生成的文件.选择HibernateDemo项目中的src文件夹.38点击Java package输入框右侧的Browse...按钮然后选中包com.genuitec.hibernate完成如图13所示的向导中的其余的内容然后选择Next.注意:向导的第2页和第3页用来自定义反向工程处理过程.当然也可以现在就直接点击Finish按钮开始处理过程,不描述对后两页的设置进行任何自定义.表4-Hibernate ReverseEngineering向导-第1页选项Java src folder选中映射文件,POJO和DAO生成后所在的项目和源码文件图14.Hibernate Reverse Engineering 向导-第2页夹.Java package映射文件,POJO 和DAO 生成后所在的包.Hibernate mapping file从选中的表格生成映射文件.Update hibernateconfiguration将生成后的映射文件添加到Hibernate 配置文件中.Java Data Object为映射文件和表格生成对应的数据对象(POJO).Create abstract class为每个数据对象生成一个抽象的父类.这个抽象类将在以后的重新生成过程中覆盖掉,但是对应的子类将不会被覆盖掉.Base persistence class如果需要的话,输入生成的POJO 所要集成的父类的完整名称.Java Data Access Object生成便于访问映射后的类和表格的数据访问对象.用户可以在Basic,Spring 和JNDI DAO 中选择一种.Generate precise findBymethods为映射类中的每个属性生成一个"findBy"方法.例如findByFirstName("name");Use custom templates覆盖MyEclipse 的内部velocity 模版为你自己的版本.参考使用模版来更好的调节生成的代码来获取更多信息.Template directory 包含了自定义模版的目录树的根节点.第2页可以使用默认的设置,选择Next.表5-Hibernate Reverse Engineering向导-第2页选项描述Rev-eng settings file 这个文件包含了反向工程的配置和选项以供以后使用.点击Setup...按钮来选择现有的文件或者创建一个新的文件.如果找不到一个这样的配置文件的话向导将会自动创建此文件.Custom rev-eng strategy 允许你指定一个自定义的反向工程策略类.这个类允许你用编程的方式来自定义反向工程处理过程的各个方面.参考使用自定义反向工程策略来获取详细信息.Type Mapping 决定是否在类型映射属性中使用Java或者Hibernate类型,例如ng.String对应string.这个设置只能在向导第3页的Customized Type Mappings列表中没有指定更多信息时才能使用.ID Generator ID Generator是Hibernate映射文件必须有的内容.它定义了持久类实例的唯一主键生成器Jaav类.参考资源部分里面的Hibernate文档链接,里面描述了每个ID生成器的详细信息.如果留空或者更详细的配置在这个向导的第3页没有配置, Hibernate映射引擎将自动为你选择一个ID生成器.Generate basic typed composite IDs 如果数据库表格包含有多个列的主键,将总是使用<复合主键>映射.如果这个选项启用并且有对应的多个外键,每个主键列将依然会被作为'简单的'标量(string,long,等),而不是引用到一个实体.将会创建<many-to-one>元素,但是它们将会标记为非可更新和非可插入的字段.如果你禁用这个选项(默认推荐用这种方式),将会创建<key-many-to-one>元素来代替上面的生成内容.Generate version and timestamp tags 如果启用,名为"version"和"timestamp"的列将会在生成的映射文件中作为<version>和<timestamp>标记出现.Customized Type Mappings 允许你来指定一个自定义的JDBC类型到Hibernate类型的转换,使用Length,Scale,Precision和Nullability作为精度控制对应原来的JDBC类型.再第3页页可以使用默认的设置,选择Finish将启动反向工程处理.描述在这个向导完成之后将会进行下面所列的操作:创建类AbstractEchoMessage .这个抽象类提供了所需的Hibernate 兼容的功能例如public 的读取器和设置器方法,这些方法对应的持久化属性和ECHO_MESSAGE 数据库表格中的列相对应.图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 生成关联到当前表格的关联表的尚未反向工程过的代码,这些表在当前配置页面尚未被显示.创建了一个EchoMessage Java类,是AbstractEchoMessage类的一个具体的子类.EchoMessage的目的是为了被修改后提供额外的业务和验证逻辑,并且不会被后续的生成代码过程所覆盖.创建了EchoMessage.hbm.xml Hibernate映射描述符.这个文件指示Hibernate如何将EchoMessage Java类和ECHO_MESSAGE数据库表格中的数据相互映射.在文件hibernate.cfg.xml中注册EchoMessage.hbm.xml映射描述符.•创建了Java类EchoMessageDAO.这个类提供了对EchoMessage数据对象类的方便的访问和操作.•创建IBaseHibernateDAO接口和BaseHibernateDAO类.这些类对基本的DAO来说是必要的,因为它使用了添加Hibernate功能时候所生成的Session工厂类(com.genuitec.hibernate.HibernateSessionFactory)来获取Hibernate会话.图15高亮显示了所生成的类,关键方法和映射文件,以及被添加到hibernate.cfg.xml文件中的对生成的映射文件的引用.图15.Hibernate反向工厂向导执行结束后更新过的项目内容5.5使用模版调整生成更好的代码•下载并解压缩这个文件到你的电脑的文件系统上.•按照README.txt文件中的说明来自定义这个模版.•调用反向工程向导,在第1页选择启用Use custom templates选项,然后将Template directory指向到包含模版树的文件夹e.5.6使用自定义反向工程策略o向你的项目中添加MyEclipse Persistence Tools类库.右键点击你的项目然后选择Properties.o在Java Build Path页面,在Libraries面板下选择Add Library....o选择MyEclipse Libraries,接着选中MyEclipse Persistence Tools.o点击Finish.39图16.添加MyEclipse Persistence Tools类库40在你的项目中创建一个新类,让这个类继承自org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy类.41图17.MyStrategy.java 源代码清单42在反向工程向导的第2页,选中刚才所创建的类图18.指定反向工程策略5.7编辑映射文件MyEclipse 包含了定制过的XML 编辑器来专门用于修改Hibernate 映射文件(*.hbm.xml).当双击映射文件的时候编辑器将会自动打开.你也可以通过右键点击文件然后选择Open With >MyEclipse Hibernate Mapping Editor.功能•超链接浏览到引用到的类和属性.•类名自动完成提示.•属性名自动完成提示.•映射文件元素,属性和值的内容完成提示.定义一个单参数的构造器,然后覆盖其中的感兴趣的一个或者多个方法,例如,columnToPropertyName .这里是一个例子,将在所有生成的属性前添加一个"ME_"前缀.MyStrategy.javapackage com.genuitec.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);}}图19.Hibernate映射文件编辑器6.使用HQL编辑器MyEclipse包含了一个Hibernate查询语言编辑器以及几个视图,允许你根据当前的Hibernate配置来执行HQL查询语句.功能•内容自动完成提示.•Hibernate Dynamic Query Translator在敲入HSQL查询语句时查看翻译后的SQL语句.•Hibernate Query Results视图可以查看多个查询结果集;结果的属性显示在Properties视图.•Query Parameters视图可以很方便的执行带有参数的查询.•项目选择器允许你随时切换不同的Hibernate项目中的Hibernate配置.下面的步骤将指导你如何使用HQL编辑器43右键点击Package Explorer中的HibernateDemo项目.44在右键菜单中的MyEclipse项目下,选择Open HQL Editor...注意:HQL编辑器也会在你尝试查看后缀为hql的文件的时候打开.图20.打开HQL编辑器45如果你没有在Hibernate透视图下工作,你将会被提示切换到相应的视图,同意切换即可.注意:总是可以切换到这个视图,通过选择菜单项Window>Open Perspective>Other>MyEclipse Hibernate 46当编辑器打开时,键入"from EchoMessage"47点击Run图标或者按下Ctrl+F9来执行查询语句.图21.在HSQL编辑器中执行查询48使用Query Parameters视图来执行带参数的查询.图22.Query Parameters视图49注意:如果你在HSQL编辑器为特定的项目初始化后修改了配置,映射文件或者数据类,一定要记得点击嵌入的工具栏上的Refresh按钮来让编辑器使用最新的配置信息.7.测试HibernateDemo应用既然Hibernate持久化功能已经整合进了HibernateDemo项目,接下来的步骤就是对它进行测试.一种测试Hibernate持久化功能的方法是创建一个带main方法的Java类.测试类将使用Hibernate向导所生成的Java对象和HibernateSessionFactory.请查看图18中所示的HibernateSessionFactory类中所生成的两个重要的方法,在测试代码中将会使用这两个方法.显示了HibernateSessionFactory中的两个重要的静态方法.getSession():这个方法将会返回一个Session变量,可以用来访问Hibernate Session类.任何时间你想使用Hibernate会话的时候你都可以调用这个方法来获取缓存过的这个Hibernate会话对象.closeSession():如果一个会话已经启动过,这个方法就简单的关闭它.图23.HibernateSessionFactory方法下面是创建测试类源代码的步骤列表:创建一个新的Java类:File>New>Class输入包名输入类名(Name):HibernateReadTest如图19所示完成页面设置,然后选择Finish图24.新建Java测试类接下来,打开文件HibernateReadTest.java,替换源代码为图20中所列的内容.HibernateReadTest.javapackage com.genuitec.hibernate;import org.hibernate.HibernateException;public class HibernateReadTest{public static void main(String[]args){//Step1-Create the DAOEchoMessageDAO dao=new EchoMessageDAO();try{//Step2-Use findById to retrieve the message with ID=1EchoMessage echoMessage=dao.findById(newLong(1));System.out.println("Entity retrieval successful,messageis:"图25.HibernateTest.java 源代码清单保存HibernateReadTest.java在Package Explorer 中选中文件HibernateReadTest.java在顶部菜单栏中选择Run 菜单,接着选择Run >Run as >Java Application这是,Console 视图将会打开,如果测试成功的话你将会看到如下面的图21所示的输出内容.注意:如果你看到了log4j 警告,你可以忽略它们即可.图26.HibernateReadTest Console 输出8.使用示例HibernateDemo 项目50下载51选择Import >Existing Projects into Workspace ,选中Select archive file 选项然后指向下载的zip 文件.点击Finish 来导入到你的Eclipse 工作台.52需要做以下修改来重新配置这个项目和你的开发环境保持一致.o 从你的数据库复制JDBC 驱动JAR 文件到项目中.通过右键点击文件然后选择Build Path >Add toBuild Path 来将它添加到项目的构造路径中.o 连接到你的数据库然后执行DDL/DDL.sql 文件中的代码来创建示例数据库并填充里面的值.在执行之前,也许需要修改表格的数据库前缀并使它和你的数据库的DDL 规范一致.o 修改配置文件hibernate.cfg.xml ,将里面的连接设置修改为你自己的数据库配置.还可能需要修改EchoMessage.hbm.xml 来修改class 元素里面指定的schema 属性为对应的数据库名称.一些其它的文件已经包含在这里:log4j.properties 用来控制log4j 类库里面的日志等级.ehcache.xml 用来控制ehcache 类库.HibernateWriteTest.java 是一个简单的演示类来展示DAO 是如何写入数据到数据库的.+echoMessage.getMsg());}catch (HibernateException e){System.err.println("Entity retrieval failed.");e.printStackTrace();}finally {try {dao.getSession().close();}catch (Exception e){//do nothing}}}}9.总结使用MyEclipse进行Hibernate开发的教程到此结束.我们还有更多的快速入门文档,包括如何使用Database Explorer, Struts,JSF,Web Projects,修改,应用服务器配置,EJB开发,以及企业应用项目.更多信息请访问MyEclipse Quickstart library.。

相关主题