培训内容HIBERNATE.docx

上传人:b****6 文档编号:4543045 上传时间:2022-12-06 格式:DOCX 页数:40 大小:59.46KB
下载 相关 举报
培训内容HIBERNATE.docx_第1页
第1页 / 共40页
培训内容HIBERNATE.docx_第2页
第2页 / 共40页
培训内容HIBERNATE.docx_第3页
第3页 / 共40页
培训内容HIBERNATE.docx_第4页
第4页 / 共40页
培训内容HIBERNATE.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

培训内容HIBERNATE.docx

《培训内容HIBERNATE.docx》由会员分享,可在线阅读,更多相关《培训内容HIBERNATE.docx(40页珍藏版)》请在冰豆网上搜索。

培训内容HIBERNATE.docx

培训内容HIBERNATE

 

培训大纲

 

目录

一、命名规范

二、应用技术

三、Hibernate的QBE、QBC查询

四、常用的类的介绍

 

一、命名规范

1.数据库表命名:

⑴所有数据库字段开头字母以及单词之间以大写形式表现并用“_”符号连接。

⑵数据表以“t”开头后跟下划线紧跟表的类别,例如此表为用户类的表,表名为“tUser_××××”,又例如此表为系统用表,取名“tSystem×××”。

相类似的情况,视图以大写“v”开头,例如:

“vUser×××”,存储过程以“s”开头。

⑶所有表名单词要有意义,使开发者一目了然。

2.类方法命名

(1)Dao(数据库持久层)层,查询记录并且记录数在1条以上的方法以“find”名字开头冠名,查询记录,记录数只一条的以“get”开头,删除记录的方法以“delete”开头,修改记录的方法以“update”开头,添加记录的方法以“save”开头冠名。

 

Services(业务逻辑)层,查询记录的方法以“query”开头,删除记录的方法以“remove”开头,修改记录的方法以“modify”开头,添加记录的方法以“add”开头冠名。

Action层,查询提交的action方法以“serch”开头,查询一条“serchXxxx”查询所有“serchListXxxx”删除提交的action以“del”开头,增加提交的action以“insert”开头,修改提交的action以“change”开头。

每一个类必须要有类注释、方法注释。

⑵类名以语义的单词组成,各个单词以大写开头,要求清晰明了。

例如:

Service层的接口以”I”开头“Service”结尾形式如:

IXxxxxService,实现接口形式XxxxxService;Action层的命名为XxxxxAction

3.包命名

(1)包的命名采用完整的英文描述符,应该都是由小写字母组成;

例如:

通用包:

mon

映射文件包:

com.xxxx.pojo

Services层:

com.xxxx.service

DWR:

com.xxxx.dwr

前台显示Action:

com.xxxx.view.action

用户后台Action:

com.xxxx.user.action

管理员后台Action:

com.xxxx.manage.action

二、应用技术

STRUTS2.0、HIBERNATE、SPRING、DWR、JAVASCRIT

STRUTS2.0

什么是Struts2?

虽然Struts2号称是一个全新的框架,但这仅仅是相对Struts1而言。

Struts2与Struts1相比,确实有很多革命性的改进,但它并不是新发布的新框架,而是在另一个赫赫有名的框架:

WebWork基础上发展起来的。

从某种程度上来讲,Struts2没有继承Struts1的血统,而是继承WebWork的血统。

或者说,WebWork衍生出了Struts2,而不是Struts1衍生了Struts2.因为Struts2是WebWork的升级,而不是一个全新的框架,因此稳定性、性能等各方面都有很好的保证:

而且吸收了Struts1和WebWork两者的优势,因此,是一个非常值得期待的框架。

ApacheStruts2是一个优雅的,可扩展的JAVAEEweb框架。

框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。

ApacheStruts2即是之前大家所熟知的WebWork2.在经历了几年的各自发展后,WebWork和Struts社区决定合二为一,也即是Struts2。

Struts2和Struts1的不同

Action类Struts1要求Action类继承一个抽象基类。

Struts1的一个普遍问题是使用抽象类编程而不是接口。

Struts2Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。

Struts2提供一个ActionSupport基类去实现常用的接口。

Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。

线程模式Struts1Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。

单例策略限制了Struts1Action能作的事,并且要在开发时特别小心。

Action资源必须是线程安全的或同步的。

Struts2Action对象为每一个请求产生一个实例,因此没有线程安全问题。

(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)

Servlet依赖Struts1Action依赖于ServletAPI,因为当一个Action被调用时HttpServletRequest和HttpServletResponse被传递给execute方法。

Struts2Action不依赖于容器,允许Action脱离容器单独被测试。

如果需要,Struts2Action仍然可以访问初始的request和response.但是,其他的元素减少或者消除了直接访问HttpServetRequest和HttpServletResponse的必要性。

可测性测试Struts1Action的一个主要问题是execute方法暴露了servletAPI(这使得测试要依赖于容器)。

一个第三方扩展StrutsTestCase提供了一套Struts1的模拟对象(来进行测试)。

Struts2Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。

捕获输入Struts1使用ActionForm对象捕获输入。

所有的ActionForm必须继承一个基类。

因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。

动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。

Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。

输入属性可能是有自己(子)属性的rich对象类型。

Action属性能够通过web页面上的taglibs访问。

Struts2也支持ActionForm模式。

rich对象类型,包括业务对象,能够用作输入/输出对象。

这种ModelDriven特性简化了taglib对POJO输入对象的引用。

表达式语言Struts1整合了JSTL,因此使用JSTLEL.这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。

Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言"ObjectGraphNotationLanguage"(OGNL)。

绑定值到页面(view)Struts1使用标准JSP机制把对象绑定到页面中来访问。

Struts2使用"ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。

ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。

类型转换:

Struts1ActionForm属性通常都是String类型。

Struts1使用Commons-Beanutils进行类型转换。

每个类一个转换器,对每一个实例来说是不可配置的。

Struts2使用OGNL进行类型转换。

提供基本和常用对象的转换器。

校验:

Struts1支持在ActionForm的validate方法中手动校验,或者通过CommonsValidator的扩展来校验。

同一个类可以有不同的校验内容,但不能校验子对象。

Struts2支持通过validate方法和XWork校验框架来进行校验。

XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性Action执行的控制:

Struts1支持每一个模块有单独的RequestProcessors(生命周期),但是模块中的所有Action必须共享相同的生命周期。

Struts2支持通过拦截器堆栈(InterceptorStacks)为每一个Action创建不同的生命周期。

堆栈能够根据需要和不同的Action一起使用。

Struts2的工作流程图

工作流程图

工作流程当接收到一个httprequestInterceptor做一些拦截或者初始的工作当外部的httpservletrequest到来时初始到了servlet容器传递给一个标准的过滤器链ActionContextCleanUp这个在集成插件方面非常有用Otherfilters(SitMesh,etc)

调用FilterDispatecher会去查找相应?

ctionMapper如果找到了相应的ActionMapper它将会将控制权限交给ActionProxyActionProxy将会通过ConfigurationManager来查找配置struts.xml下一步将会通过ActionInvocation来负责命令模式的实现(包括调用一些拦截Interceptor框架在调用action之前)

一旦action返回,会查找相应的ResultResult类型可以是jsp或者freeMark等这些组件和ActionMapper一起返回给请求的url(注意拦截器的执行顺序)

响应的返回是通过我们在web.xml中配置的过滤器如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocalActionContext如果ActionContextCleanUp不使用,则将会去清理sreadlocals

 

HIBERNATE

Hibernate是一个免费的开源Java包,它使得与关系数据库打交道变得十分轻松,就像您的数据库中包含每天使用的普通Java对象一样,同时不必考虑如何把它们从神秘的数据库表中取出(或放回到数据库表中)。

它解放了您,使您可以专注于应用程序的对象和功能,而不必担心如何保存它们或稍后如何找到它们。

本文讨论以下内容:

*历史与背景

*Hibernate的工作方式

*使用Hibernate的场合

*其他信息

历史与背景

大多数应用程序都需要处理数据。

Java应用程序运行时,往往把数据封装为相互连接的对象网络,但是当程序结束时,这些对象就会消失在一团逻辑中,所以需要有一些保存它们的方法。

有时候,甚至在编写应用程序之前,数据就已经存在了,所以需要有读入它们和将其表示为对象的方法。

手动编写代码来执行这些任务不仅单调乏味、易于出错,而且会占用整个应用程序的很大一部分开发工作量。

优秀的面向对象开发人员厌倦了这种重复性的劳动,他们开始采用通常的“积极”偷懒做法,即,创建工具,使整个过程自动化。

对于关系数据库来说,这种努力的最大成果就是对象/关系映射(ORM)工具。

这类工具有很多,从昂贵的商业产品到内置于J2EE中的EJB标准。

然而,在很多情况下,这些工具具有自身的复杂性,使得开发人员必须学习使用它们的详细规则,并修改组成应用程序的类以满足映射系统的需要。

由于这些工具为应付更加严格和复杂的企业需求而不断发展,于是在比较简单和常见的场景中,使用它们所面临的复杂性反而盖过了所能获得的好处。

这引起了一场革命,促进了轻量级解决方案的出现,而Hibernate就是这样的一个例子。

Hibernate的工作方式

Hibernate不会对您造成妨碍,也不会强迫您修改对象的行为方式。

它们不需要实现任何不可思议的接口以便能够持续存在。

惟一需要做的就是创建一份XML“映射文档”,告诉Hibernate您希望能够保存在数据库中的类,以及它们如何关联到该数据库中的表和列,然后就可以要求它以对象的形式获取数据,或者把对象保存为数据。

与其他解决方案相比,它几乎已经很完美了。

由于本文只是一篇介绍性的文章,所以不会引入构建和使用Hibernate映射文档的具体例子(我在《Hibernate:

ADeveloper'sNotebook》一书的头几章中已经介绍了一个例子)。

此外,在网上和Hibernate的在线文档中,还可以找到一些不错的例子,请参见下面的“其他信息”部分。

它实际上相当直观。

应用程序对象中的属性以一种简单而自然的方式与正确的数据库结构相关联。

运行时,Hibernate读取映射文档,然后动态构建Java类,以便管理数据库与Java之间的转换。

在Hibernate中有一个简单而直观的API,用于对数据库所表示的对象执行查询。

要修改这些对象,(一般情况下)只需在程序中与它们进行交互,然后告诉Hibernate保存修改即可。

类似地,创建新对象也很简单;只需以常规方式创建它们,然后告诉Hibernate有关它们的信息,这样就能在数据库中保存它们。

HibernateAPI学习起来很简单,而且它与程序流的交互相当自然。

在适当的位置调用它,就可以达成目的。

它带来了很多自动化和代码节省方面的好处,所以花一点时间学习它是值得的。

而且还可以获得另一个好处,即代码不用关心要使用的数据库种类(否则的话甚至必须知道)。

我所在的公司就曾有过在开发过程后期被迫更换数据库厂商的经历。

这会造成巨大的灾难,但是借助于Hibernate,只需要简单地修改Hibernate配置文件即可。

这里的讨论假定您已经通过创建Hibernate映射文档,建立了一个关系数据库,并且拥有要映射的Java类。

有一个Hibernate“工具集”可在编译时使用,以支持不同的工作流。

例如,如果您已经拥有Java类和映射文档,Hibernate可以为您创建(或更新)必需的数据库表。

或者,仅仅从映射文档开始,Hibernate也能够生成数据类。

或者,它可以反向设计您的数据库和类,从而拟定映射文档。

还有一些用于Eclipse的alpha插件,它们可以在IDE中提供智能的编辑支持以及对这些工具的图形访问。

如果您使用的是Hibernate2环境,这些工具鲜有提供,但是存在可用的第三方工具。

使用Hibernate的场合

既然Hibernate看起来如此灵活好用,为什么还要使用其他的工具呢?

下面有一些场景,可以帮助您做出判断(或许通过提供一些比较和上下文,可以有助于鉴别非常适用Hibernate的场合)。

如果应用对于数据存储的需要十分简单——例如,您只想管理一组用户优先选择——您根本不需要数据库,更不用说一个优秀的对象-关系映射系统了(即使它也如Hibernate这般易于使用)!

从Java1.4开始,有一个标准的JavaPreferencesAPI可以很好地发挥这个作用。

(在ONJava文章中可以找到有关PreferencesAPI的更多信息。

对于熟悉使用关系数据库和了解如何执行完美的SQL查询与企业数据库交互的人来说,Hibernate似乎有些碍手碍脚,这就像带有动力和自动排挡的快艇车会使注重性能的赛车驾驶员不耐烦一样。

如果您属于这种人,如果您所在的项目团队拥有一个强大的DBA,或者有一些存储过程要处理,您可能想研究一下iBATIS。

Hibernate的创建者本身就把iBATIS当作是另一种有趣的选择。

我对它很有兴趣,因为我们曾为一个电子商务站点开发了一个类似的系统(其功能更为强大),而且从那时到现在,我们已经在其他环境中使用过它,尽管在发现Hibernate之后,在新项目中我们通常更喜欢使用Hibernate。

您可以认为,以SQL为中心的解决方案(比如iBATIS)是“反向的”对象/关系映射工具,而Hibernate是一个更为传统的ORM。

当然,还有其他的外部原因会导致采用另外的方法。

比如,在一个企业环境中,必须使用成熟的EJB架构(或者其他的一些非普通对象映射系统)。

可以为提供自己的数据存储工具的平台量身定做代码,比如MacOSX'sCoreData。

使用的可能是像XMLDTD这样的存储规范,而它根本不涉及关系数据库。

但是,如果您使用的是富对象模型,而且想要灵活、轻松且高效地保存它(无论您是否正要开始或已经决定使用关系数据库,只要这是一个选择——而且存在可用的优秀免费数据库,比如MySQL,或可嵌入Java的HSQLDB,它就应该始终是一个选择),那么Hibernate很可能就是您理想的选择。

您可能会惊讶于节省的时间之多,以及您将会多么地喜欢使用它。

其他信息

Hibernate项目有大量的在线文档,可以帮助您找准方向,快速开始使用。

权威性的参考资料是HibernateinAction,作者是ChristianBauer和GavinKing,都是Hibernate的创建者。

该书全面而基础地讲述了Hibernate包的功能和正确的使用方法。

阅读我的书Hibernate:

ADeveloper'sNotebook,也是一种快速上手的好方法。

它直接但详细地讲述了如何在Java项目中设置Hibernate,以及如何使用它的一些最重要的功能。

其中的代码示例普遍基于Hibernate和HSQLDB的早期版本,所以如果您想不加改动地使用它们,需要使用这两种软件的正确版本。

无论如何,基本的概念是正确的,而且我希望能够尽快地针对Hibernate3更新本书。

另一本有趣的书是BetterFasterLighterJava,作者是BruceTate和JustinGehtland。

书中给出了一些实用方法,可以以合理的方式完成实际的项目,这也是它流行的原因之一。

它在如何评估和使用(或否决)可用的Java技术方面给出了合理建议,并作为正确方法的例子提到了Hibernate和Spring。

最后,“WorkingwithHibernateinEclipse”(它预先提到了更强大的新的alpha版的Hibernate3工具)中详细讲述了如何将一个叫做HibernateSynchronizer的Eclipse插件与Hibernate一起使用。

 

SPRING

在这由三部分组成的介绍Spring框架的系列文章的第一期中,将开始学习如何用Spring技术构建轻量级的、强壮的J2EE应用程序。

developerWorks的定期投稿人NaveenBalani通过介绍Spring框架开始了他由三部分组成的Spring系列,其中还将介绍Spring面向方面的编程(AOP)和控制反转(IOC)容器。

Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。

框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。

在这篇由三部分组成的Spring系列的第1部分中,我将介绍Spring框架。

我先从框架底层模型的角度描述该框架的功能,然后将讨论两个最有趣的模块:

Spring面向方面编程(AOP)和控制反转(IOC)容器。

接着将使用几个示例演示IOC容器在典型应用程序用例场景中的应用情况。

这些示例还将成为本系列后面部分进行的展开式讨论的基础,在本文的后面部分,将介绍Spring框架通过SpringAOP实现AOP构造的方式。

请参阅下载,下载Spring框架和ApacheAnt,运行本系列的示例应用程序需要它们。

Spring框架

Spring框架是一个分层架构,由7个定义良好的模块组成。

Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理bean的方式,如图1所示。

图1.Spring框架的7个模块

组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。

每个模块的功能如下:

核心容器:

核心容器提供Spring框架的基本功能。

核心容器的主要组件是BeanFactory,它是工厂模式的实现。

BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

Spring上下文:

Spring上下文是一个配置文件,向Spring框架提供上下文信息。

Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能。

SpringAOP:

通过配置管理特性,SpringAOP模块直接将面向方面的编程功能集成到了Spring框架中。

所以,可以很容易地使Spring框架管理的任何对象支持AOP。

SpringAOP模块为基于Spring的应用程序中的对象提供了事务管理服务。

通过使用SpringAOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。

SpringDAO:

JDBCDAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。

异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。

SpringDAO的面向JDBC的异常遵从通用的DAO异常层次结构。

SpringORM:

Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具,其中包括JDO、Hibernate和iBatisSQLMap。

所有这些都遵从Spring的通用事务和DAO异常层次结构。

SpringWeb模块:

Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。

所以,Spring框架支持与JakartaStruts的集成。

Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

SpringMVC框架:

MVC框架是一个全功能的构建Web应用程序的MVC实现。

通过策略接口,MVC框架变成为高度可配置的,MVC容纳了大量视图技术,其中包括JSP、Velocity、Tiles、iText和POI。

Spring框架的功能可以用在任何J2EE服务器中,大多数功能也适用于不受管理的环境。

Spring的核心要点是:

支持不绑定到特定J2EE服务的可重用业务和数据访问对象。

毫无疑问,这样的对象可以在不同J2EE环境(Web或EJB)、独立应用程序、测试环境之间重用。

IOC和AOP

控制反转模式(也称作依赖性介入)的基本概念是:

不创建对象,但是描述创建它们的方式。

在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。

容器(在Spring框架中是IOC容器)负责将这些联系在一起。

在典型的IOC场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,决定什么时间调用方法。

下表列出了IOC的一个实现模式。

类型1

服务需要实现专门的接口,通过接口,由对象提供这些服务,可以从对象查询依赖性(例如,需要的附加服务)

类型2

通过JavaBean的属性(例如setter方法)分配依赖性

类型3

依赖性以构造函数的形式提供,不以JavaBean属性的形式公开

Spring框架的IOC容器采用类型2和类型3实现。

面向方面的编程

面向方面的编程,即AOP,是一种编程技术,它允许程序员对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。

AOP的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。

AOP和IOC是补充性的技术,它们都运用模块化方式解决企业应用程序开发中的复杂问题。

在典型的面向对象开发方式中,可能要将日志记录

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1