Hibernate应用及其详解(强力推荐).

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第4章Hibernate应用♥4.1Hibernate概述♥4.2Hibernate应用基础♥4.3Hibernate关系映射♥4.4Hibernate高级功能♥4.5Hibernate与Struts2整合应用4.1Hibernate概述1.ORM简介对象/关系映射ORM(Object-RelationMapping)是用于将对象与对象之间的关系对应到数据库表与表之间的关系的一种模式。简单地说,ORM是通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据库中。对象和关系数据是业务实现的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在着关联和继承关系。而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,ORM系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。一般的ORM包括四个部分:对持久类对象进行CRUD操作的API、用来规定类和类属性相关查询的语言或API、规定mappingmetadata的工具,以及可以让ORM实现同事务对象一起进行dirtychecking、lazyassociationfetching和其他优化操作的技术。4.1Hibernate概述2.Hibernate体系结构Hibernate作为模型层/数据访问层。它通过配置文件(hibernate.cfg.xml或hibernate.properties)和映射文件(*.hbm.xml)把Java对象或持久化对象(PersistentObject,PO)映射到数据库中的数据表,然后通过操作PO,对数据库中的表进行各种操作,其中PO就是POJO(普通Java对象)加映射文件。Hibernate的体系结构如图4.1所示。图4.1Hibernate体系结构4.2Hibernate应用基础4.2.1Hibernate应用实例开发开发Hibernate项目的步骤如下。1.建立数据库及表本书使用SQLServer2005数据库。在XSCJ数据库中建立KCB表,其表结构如附录A.2所示。2.在MyEclipse中创建对SQLServer的连接启动MyEclipse,选择【Window】→【OpenPerspective】→【MyEclipseDatabaseExplorer】菜单项,打开MyEclipseDatabase浏览器,右击菜单,如图4.2所示,选择【New…】菜单项,出现如图4.3所示的对话框,编辑数据库连接驱动。4.2.1Hibernate应用实例开发图4.2MyEclipseDatabase浏览器,创建一个新的连接图4.3编辑数据库连接驱动4.2.1Hibernate应用实例开发编辑完成以后,在MyEclipseDatabase浏览器中,右击刚才创建的MyConn数据库连接,选择“Openconnection…”菜单项,打开名为“MyConn”的数据连接,如图4.4所示。图4.4打开数据库连接4.2.1Hibernate应用实例开发3.创建Web项目,命名为“HibernateTest”4.添加Hibernate开发能力右击项目名HibernateTest,选择【MyEclipse】→【AddHibernateCapabilites】菜单项,出现如图4.5所示的对话框,选择Hibernate框架应用版本及所需要的类库。图4.5选择Hibernate版本及所需Jar包4.2.1Hibernate应用实例开发单击【Next】按钮,进入如图4.6所示界面。创建Hibernate配置文件hibernate.cfg.xml,将该文件放在src文件夹下,后面会详细介绍该文件内容。这里先说明添加Hibernate开发功能的步骤。图4.6创建配置文件hibernate.cfg.xml4.2.1Hibernate应用实例开发单击【Next】按钮,进入如图4.7所示界面,指定Hibernate数据库连接细节。由于在前面已经配置一个名为MyConn的数据库连接,所以这里只需要选择DBDriver为“MyConn”即可。图4.7指定hibernate数据库连接4.2.1Hibernate应用实例开发单击【Next】按钮,出现如图4.8所示界面。Hibernate中有一个与数据库打交道重要的类Session。而这个类是由工厂SessionFactory创建的。这个界面询问是否需要创建SessionFactory类。如果需要创建,还需要指定创建的位置和类名。这些接口都会在后面详细介绍。单击【Finish】按钮,完成Hibernate的配置。图4.8创建SessionFactory类来简化Hibernate会话处理4.2.1Hibernate应用实例开发5.生成数据库表对应的Java类对象和映射文件首先在MyEclispse下创建一个名为“org.model”的包,这个包将用来存放与数据库表对应的Java类POJO。从主菜单栏,选择【Windows】→【OpenPerspective】→【Other】→【MyEclipseDatabaseExplorer】菜单项,打开MyEclipseDatabaseExplorer视图。打开前面创建的MyConn数据连接,选择【XSCJ】→【dbo】→【TABLE】菜单项,右击KCB表,选择【HibernateReverseEngineering…】菜单项,如图4.9所示,将启动HibernateReverseEngineering向导,该向导用于完成从已有的数据库表生成对应的Java类和相关映像文件的配置工作。图4.9Hibernate反向工程菜单4.2.1Hibernate应用实例开发首先,选择生成的Java类和映像文件所在的位置,如图4.10所示。POJO(PlainOldJavaObject,简单的Java对象),通常也称为VO(ValueObject,值对象)。图4.10生成Hibernate映射文件和Java类4.2.1Hibernate应用实例开发使用POJO名称是为了避免和EJB混淆起来,其中有一些属性及getter、setter方法。当然,如果有一个简单的运算属性也是可以的,但不允许有业务方法。单击【Next】按钮,进入如图4.11所示的界面,选择主键生成策略。图4.11配置反向工程细节4.2.1Hibernate应用实例开发6.创建测试类在src文件夹下创建包test,在该包下建立测试类,命名为Test.java,其代码。7.运行因为该程序为JavaApplication,所以可以直接运行。运行程序,控制台就会打印出“机电”。在完全没有操作数据库的情况下,就完成了对数据的插入。下面将详细讲解各文件的作用。4.2.2Hibernate各种文件的作用1.POJO类和其映射配置文件POJO类如下:packageorg.model;publicclassKcbimplementsjava.io.Serializable{privateStringkch;//对应表中KCH字段privateStringkcm;//对应表中KCM字段privateShortkxxq;//对应表中KXXQ字段privateIntegerxs;//对应表中XS字段privateIntegerxf;//对应表中XF字段publicKcb(){}//上述属性的getter和setter方法}可以发现,该类中的属性和表中的字段是一一对应的。那么通过什么方法把它们一一映射起来呢?就是前面提到的*.hbm.xml映射文件。这里当然就是Kcb.hbm.xml,其代码。4.2.2Hibernate各种文件的作用该配置文件大致分为3个部分:(1)类、表映射配置classname=org.model.Kcbtable=KCBname属性指定POJO类为org.model.Kcb,table属性指定当前类对应数据库表KCB。(2)id映射配置idname=kchtype=java.lang.Stringcolumnname=KCHlength=3/generatorclass=assigned//idHibernate的主键生成策略分为三大类:Hibernate对主键id赋值、应用程序自身对id赋值、由数据库对id赋值。assigned:应用程序自身对id赋值。当设置generatorclass=assigned/时,应用程序自身需要负责主键id的赋值。例如下述代码:Kcbkc=newKcb();//创建POJO类对象kc.setKch(198);//设置课程号kc.setKcm(机电);//设置课程名kc.setKxxq(newInteger(5).shortValue());//设置开学学期kc.setXf(newInteger(4).shortValue());//设置学分kc.setXs(newInteger(59).shortValue());//设置学时4.2.2Hibernate各种文件的作用native:由数据库对id赋值。当设置generatorclass=native/时,数据库负责主键id的赋值,最常见的是int型的自增型主键。hilo:通过hi/lo算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。seqhilo:与hi/lo类似,通过hi/lo算法实现的主键生成机制,只是主键历史状态保存在sequence中,适用于支持sequence的数据库,如Oracle。increment:主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。identity:采用数据库提供的主键生成机制,如SQLServer、MySQL中的自增主键生成机制。sequence:采用数据库提供的sequence机制生成主键,如Oraclesequence。uuid.hex:由Hibernate基于128位唯一值产生算法,根据当前设备IP、时间、JVM启动时间、内部自增量等4个参数生成十六进制数值(编码后长度为32位的字符串表示)作为主键。即使是在多实例并发运行的情况下,这种算法在最大程度上保证了产生id的唯一性。当然,重复的概率在理论上依然存在,只是概率比较小。uuid.string:与uuid.hex类似,只是对生成的主键进行编码(长度16位)。foreign:使用外部表的字段作为主键。select:Hibernate3新引入的主键生成机制,主要针对遗留系统的改造工程。4.2.2Hibernate各种文件的作用(3)属性、字段映射配置属性、字段映射将映射类属性与库表字段相关联。propertyname=kcmtype=java.lang.Stringcolumnname=KCMlength=12//propertyname=kcm指定映像类中的属性名为“kcm”,此属性将被映像到指定的库表字段KCM。type=java.lang.String指定映像字段的数据类型。columnname=KCM指定类的kcm属性映射KCB表中的KCM字段。4.2.2Hibernate各种文件的作用2.hibernate.cfg.xml文件该文件是Hibernate重要的配置文件,配置该文件主要是配置SessionFractory类。其主要代码及解释。3.HibernateSessionFactoryHibernateSessionFactory类是自定义的SessionFactory,名字可以根据自己的喜好来决定。这里用的是HibernateSessionFactory,其内容及解释。在Hibernate中,Session负责完成对象持久化操作。该文件负责创建Session对象,以及关闭Session对象。从该文件可以看出,Session对象的创建大致需要以下3个步骤:①初始化Hibernate配置管理类Con

1 / 94
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功