21 Hibernate框架开发环境配置与应用指导书v10.docx

上传人:b****5 文档编号:8285012 上传时间:2023-01-30 格式:DOCX 页数:24 大小:527.16KB
下载 相关 举报
21 Hibernate框架开发环境配置与应用指导书v10.docx_第1页
第1页 / 共24页
21 Hibernate框架开发环境配置与应用指导书v10.docx_第2页
第2页 / 共24页
21 Hibernate框架开发环境配置与应用指导书v10.docx_第3页
第3页 / 共24页
21 Hibernate框架开发环境配置与应用指导书v10.docx_第4页
第4页 / 共24页
21 Hibernate框架开发环境配置与应用指导书v10.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

21 Hibernate框架开发环境配置与应用指导书v10.docx

《21 Hibernate框架开发环境配置与应用指导书v10.docx》由会员分享,可在线阅读,更多相关《21 Hibernate框架开发环境配置与应用指导书v10.docx(24页珍藏版)》请在冰豆网上搜索。

21 Hibernate框架开发环境配置与应用指导书v10.docx

21Hibernate框架开发环境配置与应用指导书v10

Hibernate框架开发环境配置与应用指导书

1.Hibernate框架简介

Hibernate框架是一个非常流行的持久化框架,其在Web开发中占据了非常重要的地位。

Hibernate作为Web应用的底层,实现了对数据操作的封装。

Hibernate框架的应用可以改变传统的JDBC操作数据库的方式。

使用Hibernate框架最核心的是关于整体数据库的配置文件和与之相关的类。

●Configuration类

●Hibernate配置文件

●SessionFactory类

●Hibernate中的对象:

临时对象、持久化对象、脱管对象

●Hibernate中的持久化类:

1.1Configuration类

Configuration类负责管理Hibernate的配置信息,一个Configuration类的实例代表了应用程序中Java类到数据库的映射的集合。

应用程序通常只是创建一个Configuration实例,并通过它创建SessionFactory实例。

例如下面的代码:

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

1.2Hibernate配置文件:

hibernate.cfg.xml

Configuration是Hibernate的入口,在新建一个Configuration的实例时,Hibernate会在类路径中查找文件hibernate.properties和hibernate.cfg.xml文件,如果这两个文件同时存在,则hibernate.cfg.xml将会覆盖hibernate.properties文件;如果两个文件都不存在,将抛出异常。

1.3SessionFactory类

SessionFactory负责Session实例的创建。

为了创建一个SessionFactory对象,必须在Hibernate初始化时创建一个Configuration类的实例,并将已写好的映射文件交由它处理。

这样,Configuration对象就可以创建一个SessionFactory对象,当SessionFactory对象创建成功后,Configuration对象就没有用了,可以简单地抛弃它。

例如下面的实例代码:

Configurationconfig=newConfiguration().configure();

SessionFactorysessionFactory=config.buildSessionFactory();

SessionFactory是线程安全的,可以被多个线程调用以取得Session对象,而构造SessionFactory很消耗资源,所以多少情况下一个应用中只初始化一个SessionFactory,为不用的线程提供Session。

SessionFactory是重量级的,不能随意创建或者是销毁。

1.4Hibernate中的对象:

临时对象、持久化对象、脱管对象

(1)临时状态

对象在进行数据库保存操作之前被称之为临时状态,此时的数据库中并没有该对象的任何信息,而且该对象的Id信息。

如果此时没被进行持久化,则会在程序退出时丢失临时状态对象的任何信息。

由Java中的new命令开辟内存空间的Java对象,也就是平时所熟悉的普通Java对象。

如果没有变量对它引用,它将被JVM收回。

临时对象在内存是孤立存在的,它的意义仅仅是携带信息的载体,不和数据库中的数据有任何关联。

通过Session的save()和saveOrUpdate()方法可以把一个瞬时对象和数据库相关联,并把临时对象携带的信息通过配置文件所做的映射插入到数据库中,这个临时对象就成为持久化对象,并拥有和数据库继续相同的id字段。

(2)持久化状态

对象在保存到数据库后但并没有脱离Session的时候被称为持久化状态。

该状态时的数据库中已经有了该对象的信息,而且该对象的Id为数据库中对应记录的主键值。

不过由于此时还存在于Session中,所以持久化状态的对象可以对任何有关数据库的操作进行执行。

持久化对象在数据库中有相应的记录,并拥有一个持久化标识。

如果使用delete()方法,持久化对象就变成临时对象,并且删除数据库中相对应的记录,这个对象和数据库不再有任何关联。

当一个Session执行close()或者clear()或evict()之后,持久化对象就变为脱管对象,这时对象的id虽然拥有数据库的识别值,但已经不在Hibernate持久层的管理之下,它和临时对象基本上是一样的,只不过比临时对象多了数据库的标识id值。

在没有任何变量引用此对象的情况下,JVM可能将其回收。

(3)脱管状态

Session关闭之后,与此Session相关联的持久化对象就变为脱管对象,可以继续对这个对象做修改。

如果脱管对象被从新关联到某个新的Session上,会在此转成持久对象。

脱管对象拥有数据库的标识id,所以它可以通过update()、saveOrUpdate()等方法,再次与持久层关联。

1.5Hibernate持久化类

什么是ORM,ORM的全称是Object/RelationMapping即对象/关系映射。

ORM在单独的持久化层,由ORM中间件对数据细节访问进行封装。

ORM可以通过映射来实现对数据操作转换为对象的操作。

对象指使用的编程语言是面向对象的,而关系则指使用的数据库是关系型数据库。

对象/关系映射则是指完成面向对象语言到关系型数据库的映射,通过映射后,我们可以像操作对象一样来操作我们的数据库。

Hibernate开发,通过创建一个持久化类来映射一个数据库表。

其中持久化类的属性则映射到数据库表中的字段。

当我们使用面向对象的方式来操作持久化对象时,ORM框架能自动将这些操作转换成SQL语句,从而完成对数据库的操作。

持久化类

属性1

属性2

数据库表

字段1

字段2

关系模型

对象模型

ORM

(Object/RelationMapping)

 

2.Hibernate开发过程

通过使用Hibernate框架,Web应用可以通过面向对象的方式来进行数据库的各种访问操作,如插入数据、更新数据、删除数据、查询数据等等。

1.新建java项目:

javaweb172;

a)添加hibernate配置。

b)或者导入包:

hibernate根目录下lib目录下requested目录下的所有包;将导入的包文件建立路径:

buildpath。

2.创建Hibernate配置文件-----hibernate.cfg.xml

a)配置数据库连接URL,以及数据库连接驱动、数据库用户名及用户密码。

还配置一个属性dialect,用来指定数据库产品类型。

3.创建持久化类-----Product.java

a)持久化类是一个POJO(PlainOldJavaObject)类,不用继承任何类或接口。

包含与数据库表中相对应的属性,并包含各个属性所对应的setter和getter方法。

4.创建对象关系映射文件-----Product.hbm.xml

a)用来映射持久化类和数据库表,从而将持久化类中的属性和数据库表中的字段关联起来。

其中id元素用来定义主键标识,property元素用来定义其他属性。

如果不指定数据库表中字段,则默认使用持久化类中的属性作为其数据库表字段名称。

映射文件名一般使用持久化类名加“.hbm.xml”,并保存在持久化类同目录下。

5.通过Hibernate自动创建数据库表------CreateDB.java

a)并根据持久化类的属性名来作为数据库表的字段名。

6.插入数据;

7.查询数据;

8.更新数据;

9.删除数据;

10.使用Hibernate工具类

3.Hibernate开发实例

1.新建javaproject:

Hibernate1

2.在MyEclipse中配置SQLServer数据库连接

a.调出DBBrowser视图。

点击菜单“Window->ShowView->DbBrower”,切换出数据库浏览视图。

b.新增SQLServer数据库连接

c.在DBBrowser窗口内点击鼠标右键,选择“New”,进入“DatabaseProfile”界面:

d.在Driver的下拉框中如果没有SQLServer2005的驱动,则点击其下的“Configuredatabasedriver”,进入数据库驱动配置窗口:

e.在数据库驱动配置窗口中,点击“New…‘,进入新增数据库驱动界面:

选择MicrosoftSQLServer,输入Drivername,并添加数据库驱动的jar文件,确定后返回。

 

3.增加MyEclipse的Hibernate支持

右键点击项目,在菜单中选择“MyEclipse->AddHibernateCapabilities…”,按照向导逐步进行。

生成hibernate.cfg.cml配置文件。

4.Hibernate开发源代码

4.1.创建Hibernate配置文件------hibernate.cfg.xml

文件名:

hibernate.cfg.xml(在src下)

DOCTYPEhibernate-configurationPUBLIC

"-//Hibernate/HibernateConfigurationDTD3.0//EN"

"

--数据库连接URL-->

jdbc:

sqlserver:

//localhost:

1433;databaseName=javawebda

--数据库连接驱动-->

com.microsoft.sqlserver.jdbc.SQLServerDriver

--数据库用户名-->

sa

--数据库用户密码-->

sa

--数据库方言-->

org.hibernate.dialect.SQLServerDialect

--指定映射文件-->

sqlcnn

4.2.创建持久化类------Product.java

文件名:

Product.java(在新建包下)

packagecom.rzchina.javaweb;

publicclassProduct{

//产品ID

privateStringid;

//产品名称

privateStringname;

//产品价格

privatedoubleprice;

//获得产品ID

publicStringgetId(){

returnid;

}

//设置产品ID

publicvoidsetId(Stringid){

this.id=id;

}

//获得产品名称

publicStringgetName(){

returnname;

}

//设置产品名称

publicvoidsetName(Stringname){

this.name=name;

}

//获得产品价格

publicdoublegetPrice(){

returnprice;

}

//设置产品价格

publicvoidsetPrice(doubleprice){

this.price=price;

}

}

4.3.创建对象关系映射文件------Product.hbrn.xml

文件名:

Product.hbrn.xml(在新建包下)

xmlversion="1.0"?

>

DOCTYPEhibernate-mappingPUBLIC

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

"

--每个class对应一个持久化对象-->

--id元素用来定义主键标识,并指定主键生成策略-->

--定义其他属性-->

4.4.通过Hibernate自动创建数据库表------CreateDB.java

文件名:

CreateDB.java(在新建包下)

packagecom.rzchina.javaweb;

importorg.hibernate.cfg.Configuration;

importorg.hibernate.tool.hbm2ddl.SchemaExport;

publicclassCreateDB{

publicstaticvoidmain(String[]args){

//读取配置文件hibernate.cfg.xml

Configurationcfg=newConfiguration().configure();

//创建SchemaExport实例

SchemaExportsExport=newSchemaExport(cfg);

//创建数据库表

sExport.create(true,true);

}

}

4.5.插入数据------InsertProduct.java

packagecom.rzchina.javaweb;

importorg.hibernate.Session;

importorg.hibernate.SessionFactory;

importorg.hibernate.cfg.Configuration;

publicclassInsertProduct{

publicstaticvoidmain(String[]args){

//读取配置文件hibernate.cfg.xml

Configurationcfg=newConfiguration().configure();

//创建SessionFactory

SessionFactoryfactory=cfg.buildSessionFactory();

//创建Session

Sessionsession=factory.openSession();

//开启事务

session.beginTransaction();

//实例化一个Product

Productproduct=newProduct();

product.setId("0511236");

product.setName("冰箱");

product.setPrice(1250.00);

//保存数据

session.save(product);

//事务提交

session.getTransaction().commit();

//关闭session

if(session.isOpen()){

session.close();

}

}

}

4.6.查询所有数据------QueryAllProduct.java

packagecom.rzchina.javaweb;

importjava.util.Iterator;

importjava.util.List;

importorg.hibernate.Query;

importorg.hibernate.Session;

importorg.hibernate.SessionFactory;

importorg.hibernate.cfg.Configuration;

publicclassQueryAllProduct{

publicstaticvoidmain(String[]args){

//读取配置文件hibernate.cfg.xml

Configurationcfg=newConfiguration().configure();

//创建SessionFactory

SessionFactoryfactory=cfg.buildSessionFactory();

//创建Session

Sessionsession=factory.openSession();

Productp=null;

//使用HQL查询

Stringhql="FROMProductaspro";

//通过Query方法查询

Queryq=session.createQuery(hql);

//查询结果保存到list中

Listlist=q.list();

//遍历是否存在该id的产品,如果存在则进行输出

Iteratoriter=list.iterator();

while(iter.hasNext()){

p=(Product)iter.next();

System.out.println("id:

"+p.getId()+"name:

"+p.getName()+"price:

"+p.getPrice());

}

//关闭session

if(session.isOpen()){

session.close();

}

}

}

4.7.更新数据------UpdateProduct.java

packagecom.rzchina.javaweb;

importorg.hibernate.Session;

importorg.hibernate.SessionFactory;

importorg.hibernate.cfg.Configuration;

publicclassUpdateProduct{

publicstaticvoidmain(String[]args){

//读取配置文件hibernate.cfg.xml

Configurationcfg=newConfiguration().configure();

//创建SessionFactory

SessionFactoryfactory=cfg.buildSessionFactory();

//创建Session

Sessionsession=factory.openSession();

//开启事务

session.beginTransaction();

//实例化一个Product

Productproduct=newProduct();

product.setId("0511236");

product.setName("冰箱");

product.setPrice(1888.88);

//更新数据

session.update(product);

//事务提交

session.getTransaction().commit();

//关闭session

if(session.isOpen()){

session.close();

}

}

}

4.8.按Id查询------UpdateProduct.java

packagecom.rzchina.javaweb;

importjava.util.Iterator;

importjava.util.List;

importorg.hibernate.Query;

importorg.hibernate.Session;

importorg.hibernate.SessionFactory;

importorg.hibernate.cfg.Configuration;

 

publicclassQueryProductByid{

publicstaticvoidmain(String[]args){

Sessionsession=HibernateUtil.getSession();

//使用HQL查询

Stringhql="FROMProductasproWHEREpro.id=?

";

//通过Query方法查询

Queryq=session.createQuery(hql);

q.setString(0,"0511236");

//查询结果保存到list中

Listlist=q.list();

//遍历是否存在该id的产品,如果存在则进行输出

Iteratoriter=list.iterator();

if(iter.hasNext()){

Productp=(Product)iter.nex

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

当前位置:首页 > 高等教育 > 艺术

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

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