应用Hibernate技框架术示例.docx

上传人:b****6 文档编号:7457577 上传时间:2023-01-24 格式:DOCX 页数:34 大小:879.14KB
下载 相关 举报
应用Hibernate技框架术示例.docx_第1页
第1页 / 共34页
应用Hibernate技框架术示例.docx_第2页
第2页 / 共34页
应用Hibernate技框架术示例.docx_第3页
第3页 / 共34页
应用Hibernate技框架术示例.docx_第4页
第4页 / 共34页
应用Hibernate技框架术示例.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

应用Hibernate技框架术示例.docx

《应用Hibernate技框架术示例.docx》由会员分享,可在线阅读,更多相关《应用Hibernate技框架术示例.docx(34页珍藏版)》请在冰豆网上搜索。

应用Hibernate技框架术示例.docx

应用Hibernate技框架术示例

构建Web项目或者J2SE应用项目

1、在Java应用中使用Hibernate包含以下步骤

(1)创建Hibernate的数据库连接的配置文件(hibernate.cfg.xml)----为了达到连接数据库,提供数据库连接信息。

(2)创建持久化类(PO)----代表我们的数据逻辑。

(3)创建对象(PO)---关系映射(数据库表)文件----O/RMapping。

(4)通过Hibernate框架级的API编写访问数据库的代码(DAO组件)。

下面通过一个简单的JavaApplication程序的应用开发实现,演示如何运用Hibernate来访问关系数据库。

该应用的功能非常简单:

通过Hibernate保存、更新、删除、加载及查询Book对象。

2、在Eclipse中新建一个Project,名称为J2SEAppByHibernate

3、在该Project中增加一个J2SE的JavaApplication程序

类名称为J2SEAppORMapping,包名称为com.px1987.sshwebcrm.model。

将产生一个空的程序,并添加测试代码。

packagecom.px1987.sshwebcrm.model;

publicclassJ2SEAppORMapping{//可以将它看成为我们的系统的业务层组件

publicJ2SEAppORMapping(){

}

publicstaticvoidmain(String[]args){

newJ2SEAppORMapping();

}

}

在项目中添加与Hibernate有关的各种*.jar包的库(构建出Hibernate的环境)

1、将Hibernate的库文件放到Web应用的/WEB-INF/lib目录中----针对Hibernate3.2以前的版本

(1)下载Hibernate的系统并解压缩包

然后将下面的各个*.lib库文件(总共10文件)在Eclipse中导入放到Web应用的/WEB-INF/lib目录中。

antlr-2.7.5H3.jar、cglib-2.1.2.jar、asm.jar、commons-collections-2.1.1.jar、commons-logging.jar(在Struts中已经包含有,可以不再需要它)、ehcache.jarhibernate3.jar、jta.jar、dom4j-1.6.1.jar和log4j-1.2.11.jar、c3p0-0.9.1.jar。

(2)最后为下面的状态

2、将Hibernate的库文件放到Web应用的/WEB-INF/lib目录中----针对Hibernate3.3版本

(1)下载Hibernate3.3的系统并解压缩包

(2)下载SLF4J(http:

//www.slf4j.org/download.html)

3、hibernate3.3.2的系统包文件的结构与前面的各个版本的文件结构发生了变化。

(1)然后将下面的各个*.lib库文件(总共13文件)在Eclipse中导入放到Web应用的/WEB-INF/lib目录中。

antlr-2.7.6.jar、cglib-2.2.jar、commons-collections-3.1.jar、commons-logging-1.0.4.jar(在Struts中已经包含有,可以不再需要它)、javassist-3.9.0.GA.jar、ehcache-1.2.3.jarhibernate3.jar、jta-1.1.jar、dom4j-1.6.1.jar和log4j-1.2.15.jar、slf4j-api-1.5.8.jar和slf4j-simple-1.5.8.jar和c3p0-0.9.1.jar。

(2)最后为下面的状态

4、同时还保证在本Project中还应该包含有MySQL的JDBC驱动程序的库mysql-connector-java-5.1.6-bin.jar

如果项目中的数据库是Oracle数据库,则应该添加下面的系统库

连接数据库系统---构建Hibernate的数据库连接环境

1、设计数据库表

(1)设置数据库中的各个主键

(2)提供一些测试用的数据

2、为本程序提供hibernate.cfg.xml文件(不需要hibernate.properties文件)

Hibernate从其配置文件中读取和数据库连接有关的信息,这个配置文件应该位于应用的classpath中(对于Web项目为WEB-INF/classes目录)。

提高该配置文件实现连接指定的数据库。

(1)放到src的目录下

指定文件名称为hibernate.cfg.xml

将进入MyEclipse中的Hibernate的可视化状态

可以可视化化的方式进行配置

(2)内容为下面的

xmlversion='1.0'encoding='gb2312'?

>

DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD//EN"

"

org.hibernate.dialect.MySQLDialect

com.mysql.jdbc.Driver

jdbc:

mysql:

//localhost:

3306/DataBase

root

root

true

--将Hibernate发送给数据库的sql显示出来-->

--实体映射文件-->

3、配置log4j.properties属性文件

(1)配置一个日志系统

Hibernate使用Apachecommons-logging来为各种事件记录日志,commons-logging将直接输出到ApacheLog4j(如果在类路径中包括log4j.jar)或JDK1.4logging(如果运行在JDK1.4或以上的环境下);这允许我们在Log4j和JDK1.4logging之间进行选择。

但多数开发者喜欢Log4j。

(2)配置log4j.properties属性文件

从Hibernate的分发版(它在etc/目录下)拷贝log4j.properties与hibernate.cfg.xml.放在一起。

内容如下:

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target=System.out

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}%5p%c{1}:

%L-%m%n

log4j.rootLogger=warn,stdout

log4j.logger.org.hibernate=info

log4j.logger.org.hibernate.type=info

log4j.logger.org.hibernate.tool.hbm2ddl=debug

(3)缺省情况下,只有Hibernate的启动信息会显示在标准输出上

在应用系统运行过程中,可以观察Hibernate的提示内容。

实现对PO类和数据库表之间的映射

1、编写和实现本例中的PO类

(1)添加一个PO类---类名称为Book,包名称为com.px1987.sshwebcrm.dao.pobject;

(2)在该类中增加各个属性,并提供get/set方法

privateStringid;

privateStringbookName;

privatecharbookKind;

privatefloatbookPrice;

(3)最后的代码为下面的状态

packagecom.px1987.sshwebcrm.dao.pobject;

importjava.util.*;

publicclassBook{

privateStringid;

privateStringbookName;

privatecharbookKind;

privatefloatbookPrice;

publicBook(){

}

publicStringgetId()

{

returnid;

}

privatevoidsetId(Stringid)//?

{

this.id=id;

}

publicStringgetBookName()

{

returnbookName;

}

publicvoidsetBookName(StringnewBookName)

{

this.bookName=newBookName;

}

publicchargetBookKind()

{

returnbookKind;

}

publicvoidsetBookKind(charnewBookKind)

{

this.bookKind=newBookKind;

}

publicfloatgetBookPrice()

{

returnbookPrice;

}

publicvoidsetBookPrice(floatnewBookPrice)

{

this.bookPrice=newBookPrice;

}

@Override

publicinthashCode(){

finalintPRIME=31;

intresult=1;

result=PRIME*result+bookKind;

result=PRIME*result+((bookName==null)?

0:

bookName.hashCode());

result=PRIME*result+Float.floatToIntBits(bookPrice);

result=PRIME*result+((id==null)?

0:

id.hashCode());

returnresult;

}

@Override

publicbooleanequals(Objectobj){

if(this==obj)

returntrue;

if(obj==null)

returnfalse;

if(getClass()!

=obj.getClass())

returnfalse;

finalBookother=(Book)obj;

if(bookKind!

=other.bookKind)

returnfalse;

if(bookName==null){

if(other.bookName!

=null)

returnfalse;

}elseif(!

bookName.equals(other.bookName))

returnfalse;

if(Float.floatToIntBits(bookPrice)!

=Float.floatToIntBits(other.bookPrice))

returnfalse;

if(id==null){

if(other.id!

=null)

returnfalse;

}elseif(!

id.equals(other.id))

returnfalse;

returntrue;

}

}

注意:

OOP倡导的是基于setter/getter的方法访问,而非直接访问域。

因此其各个属性设置为private。

而其中的equals和hashCode方法可以采用Eclipse工具自动产生

Hashcode和equals这2个方法都是用来判断2个对象是否相等的,但是他们是有区别的。

equals这个方法是给用户调用的,如果你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用,就可以判断他们是否相等了。

简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等。

举个例子,有个学生类,属性只有姓名和性别,那么我们可以认为只要姓名和性别相等,那么就说这2个对象是相等的。

hashcode方法一般用户不会去调用,比如在hashmap中,由于key是不可以重复的,他在判断key是不是重复的时候就判断了hashcode这个方法,而且也用到了equals方法。

这里不可以重复是说equals和hashcode只要有一个不等就可以了!

所以简单来讲,hashcode相当于是一个对象的编码,就好像文件中的md5,他和equals不同就在于他返回的是int型的,比较起来不直观。

我们一般在覆盖equals的同时也要覆盖hashcode,让他们的逻辑一致。

举个例子,还是刚刚的例子,如果姓名和性别相等就算2个对象相等的话,那么hashcode的方法也要返回姓名的hashcode值加上性别的hashcode值,这样从逻辑上,他们就一致了。

同时还要注意,在PO类中药提供默认的构造方法,否则将会出现下面的错误信息。

2、映射前面的Book数据库表——声明它的映射元数据

(1)映射文件的作用

对象和关系数据库之间的映射通常是用一个XML文档(XMLdocument)来定义的。

这个映射文档被设计为易读的,并且可以手工修改。

映射语言是以Java为中心,这意味着映射文档是按照持久化类的定义来创建的,而非表的定义。

(2)Hibernate采用XML文件来配置对象-关系映射,有以下优点

●Hibernate既不会渗透到上层域模型(业务处理层)中,也不会渗透到下层数据模型(数据库系统)中。

●软件开发人员可以独立设计域模型,不必强迫遵守任何规范。

●数据库设计人员可以独立设计数据模型,不必强迫遵守任何规范。

●对象-关系映射不依赖于任何程序代码,如果需要修改对象-关系映射,只需修改XML文件,不需要修改任何程序,提高了软件的灵活性,并且使维护更加方便。

注意:

Hibernate没有渗透到域模型中,是指在持久化类中没有引入任何HibernateAPI。

但是对于应用中负责处理业务的过程域对象,当然应该借助HibernateAPI来操纵数据库。

可以直接在Eclipse的项目视图中(3)增加一个Book.hbm.xml文件

(4)映射文件的内容——简化版

xmlversion="1.0"?

>

DOCTYPEhibernate-mapping

PUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"

"

(5)正常版

xmlversion="1.0"?

>

DOCTYPEhibernate-mapping

PUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"

"

(5)该Book.hbm.xml存放的位置

(6)保证在hibernate.cfg.xml文件中添加对Book.hbm.xml的引用定义

编程基于HibernateAPI的DAO组件

1、设计创建SessionFactory对象的HibernateUtil的辅助类

(1)增加一个类,名称为HibernateUtil,包名称为com.px1987.sshwebcrm.dao.util

HibernateUtil这个类帮助我们创建SessionFactory对象、并管理Session。

(2)编程该类

packagecom.px1987.sshwebcrm.dao.util;

importorg.hibernate.*;

importorg.hibernate.cfg.*;

publicclassHibernateUtil{

privatestaticfinalSessionFactorysessionFactory;

/*静态初始器,当JVM(Java虚拟机)加载HibernateUtil类时,会执行该静态代码块。

*/

static{

try{

//创建SessionFactory对象的代码(但不能重复创建)

//sessionFactory=newConfiguration().configure("c:

/xxx/hibernate.cfg.xml").buildSessionFactory();

sessionFactory=newConfiguration().configure().buildSessionFactory();

}

catch(Throwableex){

thrownewExceptionInInitializerError(ex);

}

}

publicstaticfinalThreadLocalthreadLocal=newThreadLocal();

publicstaticSessioncurrentSession(){

SessioncurrentSession=(Session)threadLocal.get();

//OpenanewSession,ifthisThreadhasnoneyet

if(currentSession==null){

currentSession=sessionFactory.openSession();

threadLocal.set(currentSession);

}

returncurrentSession;

}

publicstaticvoidcloseSession(){

SessioncurrentSession=(Session)threadLocal.get();

if(currentSession!

=null)

currentSession.close();

threadLocal.set(null);

}

privatestaticSessionFactorygetSessionFactory()throwsHibernateException{

returnsessionFactory;

}

}

2、设计访问数据库表中的数据的业务组件HibernateDAOBean.java类

(1)添加一个接口HibernateDAOInterface,包名称为com.px1987.sshwebcrm.dao.inter-----我们面向接口编程

(2)在该接口中提供如下的方法定义

packagecom.px1987.sshwebcrm.dao.inter;

importjava.util.ArrayList;

importorg.hibernate.HibernateException;

publicinterfaceHibernateDAOInterface{

publicArrayListdoSelectBookDataFromDB(StringselectHQL)

throwsHibernateException;

publicbooleandoInsertBookDataToDB()

throwsHibernateException,jav

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

当前位置:首页 > 高等教育 > 理学

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

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