Hibernate3-1环境及基础配置课件_第1页
Hibernate3-1环境及基础配置课件_第2页
Hibernate3-1环境及基础配置课件_第3页
Hibernate3-1环境及基础配置课件_第4页
Hibernate3-1环境及基础配置课件_第5页
已阅读5页,还剩119页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

J2EE企业级应用开发—Hibernate框架J2EE企业级应用开发任务1开发第一个Hibernate应用

Hibernate3-1环境及基础配置课件本任务主要内容数据持久化与ORMHibernate框架基础搭建Hibernate的开发环境Hibernate的基础配置Hibernate的生命周期Hibernate的常用API本任务主要内容数据持久化与ORM知识目标了解数据的持久化与ORM了解Hibernate3的工作原理掌握Hibernate3进行数据持久化的使用掌握Hibernate3的配置和映射理解Hibernate的生命周期能力目标能理解Hibernate的作用能开发第一个Hibernate程序能在Web开发中综合struts和Hibernate能使用Hibernate的相关类实现数据持久化操作知识目标一、持久化与ORM持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。持久层就是专门负责持久化工作的逻辑层,由它统一与数据库层打交道持久层包括一个业务领域实体的模型,在持久层中封装对数据库访问的细节,向业务逻辑公开接口。一、持久化与ORM持久化(Persistence),即把数据持久化与ORM面向对象程序设计语言与关系数据库发展不同步时,需要一种中间解决方案,ORM(

Object/RelationMapping)框架就是这样的解决方案。ORM是一类框架的总称,它概述了这类框架的基本特征:完成面向对象的程序设计语言到关系数据库的映射。将关系数据库中数据用对象的形式表现,并用面向对象的方式组织对象,实现系统的业务逻辑。基于ORM框架完成映射后,既可利用面向对象程序设计语言的简单易用性,又可利用关系数据库的技术优势。持久化与ORM面向对象程序设计语言与关系数据库发展不同步时,持久化与ORM持久化与ORM常见ORM框架目前ORM框架的产品非常多,除了各大著名公司、组织的产品外,甚至,其他一些小团队也都有推出自己的ORM框架。目前流行的ORM框架有如下这些产品。传统的EntityEJB,Hibernate,IBATIS,Oracle的TopLink,OJB,JPA(JavaPersistenceAPI)常见ORM框架目前ORM框架的产品非常多,除了各大著名公司、二、Hibernate概述—简介Hibernate是目前最流行的开源的持久层框架ORM框架,它是一个面向Java环境的对象/关系数据库映射工具。Hibernate也是一个轻量级的O/RMapping框架,建立面向对象的域模型和关系数据模型之间的映射,是连接java应用和数据库的中间件。Hibernate对JDBC进行封装,负责java对象的持久化。真正实现了开发者采用面向对象的方式来操作关系数据库。Hibernate在分层结构中处于持久化层,封装对数据库的访问细节,使业务逻辑层更专注于实现业务逻辑。二、Hibernate概述—简介Hibernate是目前最流Hibernate概述—优点Hibernate能在众多的ORM框架中脱颖而出,因为Hibernate与其他ORM框架对比具有如下优势:Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。开源和免费的License,方便需要时研究源代码、改写源代码、进行功能定制。Hibernate的性能非常好,因为它是一个轻量级框架。映射的灵活性很出色。它支持很多关系型数据库,从一对一到多对多的各种复杂关系。Hibernate是一个基于jdbc的主流持久化框架,是一个优秀的ORM实现,它很大程度的简化了dao层编码工作。

Hibernate概述—优点Hibernate能在众多的ORHibernate概述—体系结构在分层体系架构中,Hibernate负责应用程序与数据库之间的数据交换,起ORM中间件的作用,使得应用程序通过Hibernate的API就可以访问数据库。Hibernate使用数据库和配置信息来为应用程序提供持久化服务(以及持久的对象)配置连接相关信息配置对象和表的映射关系Hibernate概述—体系结构在分层体系架构中,Hiber

Hibernate概述-对象持久化概述Hibernate中间件:Hibernate不和特定的业务领域相关,能够把任意一个Java应用与数据库系统连接,可以理解为是一种中间件。应用1业务逻辑层应用2业务逻辑层应用3业务逻辑层持久化层(hibernate)数据库1数据库2数据库3持久化层封装了数据访问的细节,为业务逻辑层提供了面向对象的API。完善的持久化层应该达到的目标:1.代码重用性高,可完成所有的数据访问操作。2.如果需要的话,能够支持多种数据库平台。3.具有相对独立性,当持久化层变化时,不会影响上层实现。Hibernate概述-对象持久化概述Hibernate中publicListgetAllEmpl(){Listlist=newArrayList();//?¡§¨¢¡é¨¢??¨®con=newDBCon().getConn();Stringsql="select*fromtb_empl";try{pstmt=con.prepareStatement(sql);rs=pstmt.executeQuery();intid;Stringempl_id,empl_name,empl_depart,sex,intime,bz,interest,empl_pass1,prov,city;while(rs.next()){id=rs.getInt(1);empl_id=rs.getString(2);empl_name=rs.getString(3);empl_pass1=rs.getString(4);sex=rs.getString(5);interest=rs.getString(6);empl_depart=rs.getString(7);prov=rs.getString(8);city=rs.getString(9);intime=rs.getString(10);bz=rs.getString(11);Emple=newEmpl();e.setId(id);e.setEmpl_id(empl_id);e.setEmpl_name(empl_name);e.setEmpl_pass1(empl_pass1);e.setSex(sex);e.setInterest(interest);e.setEmpl_depart(empl_depart);e.setProv(prov);e.setCity(city);e.setIntime(intime);e.setBz(bz);list.add(e);}}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}returnlist;}1.简化开发过程2.业务逻辑与数据逻辑相分离(业务人员不需要考虑数据表的逻辑结构)3.数据访问逻辑与物理数据库的结构相分离(数据访问逻辑的开发者不再关心不同的物理数据库的差异性)JDBC查询数据,并添加数据到列表中。Sessionsession=HibernateSessionFactory.getSession();Queryquery=session.createQuery("fromtb_empl");Listallempls=query.list();ORMpublicListgetAllEmpl(){1.简化三、Hibernate3的应用—使用步骤在应用中使用Hibernate,首先必须进行Hibernate与数据库驱动、连接设置、ORM映射文件的创建等。使用Hibernate的开发步骤如下:设计:一般首先进行领域对象的设计。因为在Hibernate中,我们的领域对象可以直接充当持久化类。映射:定义Hibernate的映射文件,实现持久化类和数据库之间映射。应用:使用Hibernate提供的API,实现具体的持久化业务。三、Hibernate3的应用—使用步骤在应用中使用Hibe第一个Hibernate程序的开发—1加载包Hibernate并不依赖于任何服务器和框架,只要把Hibernate的jar包添加即可。方法:1.官网下载Hibernate包后加载必备包2.MyEclipse->ProjectCapabilities->addHibernateCapabilities第一个Hibernate程序的开发—1加载包Hibernat第一个Hibernate程序的开发—2创建数据库及表创建数据库并创建数据表person,包括属性:id,name,age.其中:主键id字段设为自动增长,对应于实体类中的id属性。第一个Hibernate程序的开发—2创建数据库及表创建数第一个Hibernate程序的开发—3创建持久化类在Hibernate中是直接使用POJO来作为持久化类的。持久化类符合JavaBean的规范,包含:属性(一般有一个id,作为OID)、无参构造方法、getter和setter方法。在Web编程中,为了在会话中对Java对象进行持久化,一般要实现Serializable接口。示例:定义持久化类Person第一个Hibernate程序的开发—3创建持久化类在Hib第一个Hibernate程序的开发—4编写配置文件Hibernate的核心配置文件是hibernate.cfg.xml,也可以为perties。在此文件中配置了用于连接数据库的信息和一些全局配置,

一般直接放在src目录下。可在MyEclipse下创建相应的数据库连接,添加Hibernate功能包时,直接使用连接,自动生成配置文件。示例:创建配置文件hibernate.cfg.xml第一个Hibernate程序的开发—4编写配置文件Hibe<?xmlversion='1.0'encoding='UTF-8'?><!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN"“/hibernate-configuration-3.0.dtd”><hibernate-configuration><session-factory><propertyname="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property><propertyname="connection.url">jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs</property><propertyname="connection.username">sa</property><propertyname="connection.password">123</property><propertyname="dialect">org.hibernate.dialect.SQLServerDialect</property><propertyname="file">mysqlserver</property>

<mappingresource=“com/hibernate/person.hbm.xml"/>

</session-factory></hibernate-configuration>

<?xmlversion='1.0'encoding='第一个Hibernate程序的开发—5编写映射文件映射文件实现数据库字段与持久化类属性匹配。在hibernate中习惯的命名为“*.hbm.xml”文件,一般映射文件与其对应的持久化类在同一级目录中。可以在MyEclipse中用反向工程生成。示例:创建映射文件person.hbm.xml第一个Hibernate程序的开发—5编写映射文件映射文件<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"“/hibernate-mapping-3.0.dtd”><hibernate-mapping>

<classname=“com.hibernate.Person"table="tb_person"><idname="id"type="integer"><columnname="id"/><generatorclass="native"></generator></id>

<propertyname=“name"type="string"><columnname="name"length="50"not-null="true"/></property>

<propertyname=“age"type=“integer"><columnname=“age“not-null="true"/></property>

</class></hibernate-mapping>主键映射类-表映射字段映射<?xmlversion="1.0"encoding="第一个Hibernate程序的开发—6编写测试程序Hibernate可以应用于Java程序或Web程序。先初始化Hibernate,创建一个SessionFactory实例;接下来每次执行数据库事务时,先从SessionFactory中获取得一个Session实例,再通过它来保存、更新、删除、加载或查询Java对象。示例:创建Java测试程序,将一个对象的信息保存到数据库中。第一个Hibernate程序的开发—6编写测试程序Hibe示例:测试数据保存publicclassHibernateTest{ publicstaticvoidmain(String[]args){ Personperson=newPerson(); person.setName("zhang"); person.setAge(20);

Sessionsess=HibernateSessionFactory.getSession(); Transactiontrans=sess.beginTransaction(); sess.save(person); mit(); System.out.println(“恭喜,第一个Hibernate程序运行成功,记录已插入数据表中!"); sess.close(); }}Configurationconfig=newConfiguration();config.configure();//配置文件名不是hibernate.cfg.xml时将文件名传入

SessionFactory

sessionFactory=config.buildSessionFactory();//相当于JDBC的注册驱动Sessionsession=sessionFactory.openSession();//相当于JDBC的getConnection

Transactiontx=session.beginTransaction();//Hibernate操作必须启动事务Personperson=newPerson();//创建持久化对象

person.setName("zhang");

person.setAge(20);

session.save(person);//保存对象

mit();//持久化到数据库中示例:测试数据保存publicclassHibernatHibernate运行过程Hibernate的运行过程如下:1、应用程序先调用Configuration类,该类读取Hibernate配置文件及映射文件中的信息,2、并用这些信息生成一个SessionFactory对象,3、然后从SessionFactory对象生成一个Session对象,4、并用Session对象生成Transaction对象;

A、可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载、保存、更新、删除、等操作;

B、在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将提交这些操作到数据库中。Hibernate运行过程Hibernate的运行过程如下:Hibernate运行过程应用程序

ConfigurationSessionFactorySessionQuery映射文件.hbm.xmlTransaction配置文件hibernate.cfg.xml回滚

提交

数据库

查询异常正常Hibernate运行过程应用程序Configuratio实践练习使用Hibernate实现用户数据的保存、删除步骤一(手动方式)(1)创建用户数据表(2)创建相应的用户实体类(3)配置hibernate环境(加载必备包)(4)创建hibernate.cfg.xml配置文件(一般放src下)(5)创建映射文件*.hbm.xml(和实体类一个路径)(6)测试类步骤二(反向工程)实践练习使用Hibernate实现用户数据的保存、删除四、Hibernate配置和映射—配置由于Hibernate是为了能在各种不同环境下工作而设计的,因此存在着大量的配置参数。Hibernate同时支持XML格式和properties格式的配置文件,如果Hibernate配置文件为XML格式,文件名一般默认为“hibernate.cfg.xml”;如果为properties格式,则默认为“perties”。对于Web应用而言,配置文件应放置在服务器的\WEB-INF\classes目录下,配置文件放在src目录下,自动部署。四、Hibernate配置和映射—配置由于Hibernate<?xmlversion=“1.0”encoding=“utf-8”?><!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD//EN"“/hibernate-configuration-2.0.dtd”><hibernate-configuration><session-factory><!--设置数据库的连接URL--><propertyname="hibernate.connection.url">jdbc:microsoft:sqlserver://localhost:1433;Database=hibdb</property><!--配置数据库的JDBC驱动

--><propertyname="hibernate.connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property><!—配置连接数据库的用户名和密码

--><propertyname=“hibernate.connection.username”>sa</property><propertyname="hibernate.connection.password">123</property><!--dialect,数据库方言,每个数据库管理系统都有其对应的Dialet以匹配其平台特性

--><propertyname="dialect">org.hibernate.dialect.SQLServerDialect</property><!--是否将运行期生成的SQL输出到日志以供调试

--><propertyname=“hibernate.show_sql”>true</property><!--映射文件配置,注意配置文件名必须包含其相对于根的全路径

--><mappingresource=“com/hibernate/person.hbm.xml"/></session-factory></hibernate-configuration><?xmlversion=“1.0”encoding=“属性名用途属性值hibernate.connection.driver_class设置数据库的驱动类驱动类名hibernate.connection.url设置连接数据库的URLURLhibernate.connection.username设置连接数据库的用户名用户名hibernate.connection.password设置连接数据库的密码密码hibernate.connection.pool_size设置连接池的最大容量整型数据hibernate.connection.datasource设置数据源的JNDI名字JNDI名hibernate.dialect设置Hibernate的数据库方言方言类名hibernate.show_sql是否把Hibernate运行时的SQL语句输出true或falsehibernate.format_sql是否格式化输出的SQL语句true或falsehibernate.default_catalog在生成的SQL语句中,将默认的catalog加到表名上catalog值hibernate.connection.auotocommit设置是否启用数据库事务的自动提交true或者falsehibernate.max_fetch_depth为单向关联的一对一和多对一的外连接抓取(outerjoinfetch)设置最大深度,数值为0将关闭默认的外连接抓取推荐数值为0~3hibernate.default_batch_fetch_size设置关联的批量抓取数量建议值4、8、16hibernate.default_entity_mode指定默认的持久化实体表现形式dynamic-map、pojo或dom4jhibernate.order_updates强制Hibernate按照被更新数据的主键,为SQL更新排序,可以减少在高并发系统中事务的死锁几率true或falsehibernate.generate_statistics是否激活收集性能调节的统计数据

true或falsehibernate.order_updates利用主键值对将要更新的字段进行排序true或falseHibernate.user_indentifer_rollback若设置为true,如果表中的所有数据被删除,主键标识符将被重置true或falsehibernate.use_sql_comments是否生成有助于调试的注释信息true或false属性名用途属性值hibernate.connection.d四、Hibernate配置和映射—映射概述对象关系映射(ORM)是一种为了解决面向对象与面向关系数据库互不匹配现象的技术,即ORM是通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据库中。Hibernate映射主要是通过对象关系映射文件实现,通常用XML文档来定义。对象关系映射文件把数据库中的实体(一般为二维表)映射到面向对象中的实体对象,把数据库中多个表之间的相互关系也反映到映射好的类中。。四、Hibernate配置和映射—映射概述对象关系映射(OR四、Hibernate配置和映射—映射结构映射文件以持久化类为基础,将持久化类中出现的属性在映射文件中体现出来。实体映射是类与表之间的联系纽带,实体映射的核心内容是实体类与数据表之间的映射定义。Hibernate中,实体关系映射主要包括三个部分:类—表映射<class>主键映射<id>字段映射<property>四、Hibernate配置和映射—映射结构映射文件以持久化类<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"“/hibernate-mapping-3.0.dtd”><hibernate-mapping>

<classname=“com.hibernate.Person"table="tb_person"><idname="id"type="integer"><columnname="id"/><generatorclass="native"></generator></id>

<propertyname=“name"type="string"><columnname="name"length="50"not-null="true"/></property>

<propertyname=“age"type=“integer"><columnname=“age“not-null="true"/></property>

</class></hibernate-mapping><?xmlversion="1.0"encoding="四、Hibernate配置和映射—<class><hibernate-mapping>元素是Hibernate映射文件的根元素。1.类—表映射

配置代码如下:<classname=“完整类名”table="映射的表名">其中,class表示类和数据库中的表的映射关系;name属性指定类的名称,这里需要给出完整的类名;table属性指定与类映射的表名。通过映射,类对应于数据库中的表,类的实例对应于表中的记录。四、Hibernate配置和映射—<class><hiber四、Hibernate配置和映射—<id>关系数据库中依靠主键来区分不同的记录,被映射的类必须定义对应数据库主键字段。2.主键映射

<idname="id"type="integer"><columnname="id"/><generatorclass="native"></generator></id>其中,id表示主键映射;name属性指定类中哪个属性作为OID;type属性指定Hiberante的映射类型;column属性表示数据表中主键字段的名字。<generator>指定了主键的生成方式,class属性指定主键的生成方式四、Hibernate配置和映射—<id>关系数据库中依靠主四、Hibernate配置和映射—OIDHibernate使用对象标识符(OID)来建立内存中的对象和表中记录的对应关系,它和表的主键对应为了保证OID的惟一性和不可变性,应该让Hibernate而不是应用程序来为OID赋值,数据库表的主键值也是可由Hibernate生成.四、Hibernate配置和映射—OIDHibernate使四、Hibernate配置和映射—内置生成器可以借助Hibernate来自动生成一个OID。使用的是<generator>元素,class属性设定标识符生成器的类名,可写它的完整类名:org.hibernate.id.IncrementGenerator,一般用其简称:increment。关系数据库中依靠主键来区分不同的记录,主键有自然主键与代理主键:自然主键指充当主键的字段本身具有一定的含义,是构成记录的组成部分,如学生的学号代理主键指充当主键的字段本身不具有业务含义,只起主键主键作用,如自动增长类型的ID号等。在Hibernate应用方案中,推荐使用代理主键。四、Hibernate配置和映射—内置生成器可以借助Hibe四、Hibernate配置和映射—内置生成器increment:当向数据库中插入新记录时,主键自动增1,与底层数据库无关,大部分数据库都支持increment生成方式。identity:使用数据库提供的主键生成机制,自动为主键赋值。与底层数据库相关,不便于不同数据库之间的移植,数据库必须支持自动增长字段类型sequence:

Hibernate根据底层数据库序列来生成标识符,前提是条件是底层数据库支持序列(如Oracle)。hilo:

Hibernate根据high/low算法来生成标识符,需要一个表来保存额外的主键信息,这样生成的标识符只在特定的数据库中是惟一的。native:由Hibernate根据不同的数据库选择主键的生成方式,如identity、sequence或hilo,与底层数据库无关,便于不同数据库之间的移植。uuid.hex:

Hibernate采用128位的UUID算法来生成标识符,UUID算法能够在网络环境中生成唯一的字符串标识符。uuid.string:使用UUID算法来生成标识符,UUID被编码为一个16个字符长的任意ASCII组成的字符串。assigned:由Java应用程序负责为对象生成标识符,主键值完全由应用程序负责,需在保存数据前完成。

四、Hibernate配置和映射—内置生成器incremen四、Hibernate配置和映射—内置生成器选用Hibernate内置的标识生成器时,应根据所选用的数据库产品而定。若数据库产品为MySQL或MSSQLServer,则优先考虑identity生成器;若是Oracle则可优先考虑sequence生成器;若想提高应用的可移植性,开发跨平台的应用则可选用native生成器。四、Hibernate配置和映射—内置生成器选用Hibern四、Hibernate配置和映射—<property>字段映射将映射类型与数据库表的字段相关,一般包含对象的属性名、数据表的字段名和数据类型。3.字段映射<propertyname=“属性名”type=“类型名"><columnname=“字段名“/></property>其中,property表示属性设置,name表示类中属性名,将映射到指定的数据表字段;type表示映射的数据类型;column表示数据表字段,name表示数据表中对应于类属性的字段名。四、Hibernate配置和映射—<property>字段映实践练习创建机构(Branch)实体,实现机构信息的持久化,正确配置实体映射文件(Branch.hbm.xml)注意:主键的生成策略思考:对应于实体属性不同类型,type属性值该设为什么?实践练习创建机构(Branch)实体,实现机构信息的持久化,四、Hibernate配置和映射—<property>关于type属性可以是如下几种:(1)Hibernate基本类型名(比如:integer,string,character,date,timestamp,float,binary,serializable,object,blob)。(2)一个Java类的名字,这个类属于一种默认基础类型(比如:int,float,char,java.lang.String,java.util.Date,java.lang.Integer,java.sql.Clob)。(3)一个可以序列化的Java类的名字。(4)一个自定义类型的类的名字。(比如:com.test.type.MyCustomType)。四、Hibernate配置和映射—<property>关于t四、Hibernate配置和映射—类型关系Hibernate的内置类型通常使用和Java类型相同的名字,它能够把Java基本类型、Java时间和日期类型、Java大对象类型及JDK常用的Java类型映射到相应的标准SQL类型。Java应用通过Hibernate访问数据库,而Hibernate又通过JDBC驱动程序访数据库,JDBC对底层数据库SQL类型进行封装,向上提供标准的SQL类型接口,这样Hibernate就可以根据底层数据库使用的SQL方言,把标准SQL类型翻译成底成数据库类型。四、Hibernate配置和映射—类型关系Hibernate四、Hibernate配置和映射—类型映射关系下表列出了Hibernate映射类型、对应的JAVA基本类型(包括它们的包装类)和以及对应的标准SQL类型。四、Hibernate配置和映射—类型映射关系下表列出了Hi四、Hibernate配置和映射—类型映射关系在Java中,代表时间和日志的类型包括:java.util.Date和java.util.Calendar。此外在JDBCAPI中还提供了三个扩展java.util.Date类的之类:java.sql.Date、java.sql.Time和java.sql.Timestamp,这三个类分别和标准的SQL类型中的DATA、TIME、TIMESTAMP类型对应在JDBCAPI中提供了java.sql.Clob和java.sql.Blob类型,它们分别和标准SQL中的CLOB和BLOB类型对应。四、Hibernate配置和映射—类型映射关系在Java中,实践练习 创建员工(Employee)实体,创建其映射文件,配置合适的类型对应关系,实现员工信息的基本管理注意:员工属性的类型匹配。实践练习 创建员工(Employee)实体,创建其映射文件,五、持久化对象与生命周期Hibernate中有三种状态,对其生命周期状态有了深入理解,才能更好的理解Hibernate的运行机制。对于需要持久化的Java对象,在其生命周期中一般有三种状态:临时状态、持久化状态、游离状态,这三种状态之间可以互相转化。一个持久化类的实例可能处于三种不同状态中的某一种。这三种状态的定义则与所谓的持久化上下文(persistencecontext)有关。Hibernate的Session对象就是这个所谓的持久化上下文。五、持久化对象与生命周期Hibernate中有三种状态,对其五、持久化对象与生命周期临时状态一般是用new创建的对象,没有进行持久化,还未处于Session中,此时的对象叫临时对象;

持久化状态是对象已经加入到了Session缓存中,如通过hibernate语句保存的对象,此时的对象叫做持久化对象;

游离状态是持久化对象脱离了Session对象,如Session缓存被清空的对象,虽然已经持久化了,但是不在Session中,此时的对象叫做游离对象。

五、持久化对象与生命周期临时状态一般是用new创建的对象,没五、持久化对象与生命周期五、持久化对象与生命周期六、Hibernate核心类—概述使用Hibernate核心接口与类不仅可以存储和获得持久对象,还能够进行事务控制。Hibernate的核心接口一共有5个,分别为:SessionFactorySessionTransactionQueryConfiguration获取找到hibernate.cfg.xml链接

六、Hibernate核心类—概述使用Hibernate核心六、Hibernate核心类—Configuration类Configuration类的作用是对Hibernate进行配置,以及对它进行启动。Configuration可以完成以下几方面的工作。(1)加载配置文件。在Hibernate的启动过程中,Configuration类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象,(2)动态添加映射文件。还可以利用Configuration类在程序中添加XML映射定义文件。(3)也可以通过Configuration指定配置属性在Hibernate的启动过程中,Configuration类的实例首先定位缺省XML配置文件(hibernate.cfg.xml),并读取关的配置项目,然后创建出一个SessionFactory对象。六、Hibernate核心类—Configuration类六、Hibernate核心类—SessionFactory类这里用到了一个设计模式――工厂模式,用户程序从工厂类SessionFactory中取得Session的实例。SessionFactory不是轻量级的。它的设计者的意图是让它能在整个应用中共享。典型地来说,一个项目通常只需要一个SessionFactory就够了,但是当项目要操作多个数据库时,必须为每个数据库指定一个SessionFactory。SessionFactory在Hibernate中实际起到了一个缓冲区的作用,它缓冲了Hibernate自动生成的SQL语句和一些其它的映射数据,还缓冲了一些将来有可能重复利用的数据。获取:SessionFactorysessionFactory=config.buildSessionFactory();六、Hibernate核心类—SessionFactory六、Hibernate核心类—Session类Session是持久层操作的基础,相当于JDBC中的Connection。在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。通常将每一个Session实例和一个数据库事务绑定,也就是说,每执行一个数据库事务(操作),都应该先创建一个新的Session实例。获取:Sessionsession=sessionFactory.openSession();六、Hibernate核心类—Session类Sessio六、Hibernate核心类—Session类对于数据操作通常会是CRUD,Session接口中提供了的save、load、delete、update等方法完成持久层操作。save(Object

object)

首先为给定的自由状态(Transient)的对象(根据配置)生成一个标识并赋值,然后将其持久化。

load

(Class

theClass,Serializable

id)

在符合条件的实例存在的情况下,根据给定的实体类和标识返回持久化状态的实例。get(Class

theClass,Serializable

id)

delete(Object

object)从数据库中移除持久化(persistent)对象的实例。

update(Object

object)根据给定的detached(游离状态)对象实例的标识更新对应的持久化实例。六、Hibernate核心类—Session类对于数据操作六、Hibernate核心类—Session类Session.save()方法用于实体对象的持久化保存,也就是说当执行session.save()方法时会生成对应的insertSQL语句,完成数据的保存。代码:Personuser=newPerson();user.setName(“zx”);//开始一个事务Transactiontx=session.beginTransaction();session.save(user);session.flush();//提交mit();session.close();//关闭事务tx.close六、Hibernate核心类—Session类Sessio六、Hibernate核心类—Session类delete()方法用于从数据库中删除一个实体所对应的数据,如果传入的对象是持久化对象,那么当清理缓存时,就会执行delete操作。如果传入的是脱管对象,那么首先会使该对象与session相关联,然后当清理缓存时,再执行delete操作。代码如下:Sessionsession=sessionFactory().openSession();Transactiontx=session.beginTransaction();Customercustomer=(Customer)session.load(Customer.class,”1”);//计划执行一条delete语句session.delete(customer);//清理缓存,执行一条delete语句mit();//关闭session,这时将会把customer对象从缓存中删除。session.close();六、Hibernate核心类—Session类delete六、Hibernate核心类—Session类Session的load()和get()方法都能根据给定的OID从数据库中加载一个持久化对象,这两个方法的区别在于:当数据库中不存在与OID对应的记录时,load()方法抛出net.sf.ObjectNotFoundException异常,而get()方法返回null.由get()、load()或其他查询方法返回的对象都位于当前Session的缓存中,因此修改了持久化对象的属性后,当Session清理缓存时,会根据持久化对象的属性变化来同步更新数据库。六、Hibernate核心类—Session类Sessio六、Hibernate核心类—Session类session.update()方法能够将一个处于临时脱管或状态的对象,重新纳入Hibernate的内部缓存,变成持久化对象。如下面的代码:Transactiontx=session.beginTransaction();session.update(customer);//提交mit();session.close();tx.close六、Hibernate核心类—Session类sessio六、Hibernate核心类—Session类saveorUpdate()方法有save()和update()方法的功能,对于传入的对象,首先会执行一遍查询语句判断该对象在数据库中是否存在,然后调用相应的方法。其实这个方法就是为了解决一个对象它的状态可能处于动态的变化当中的。运用这个方法就能不用太关心对象的状态,而关心业务逻辑了。如果传入该方法的是一个脱管对象,那么这个方法就会执行update操作,如果传入该方法的是一个临时对象,那么这个方法就会执行insert操作。六、Hibernate核心类—Session类saveor六、Hibernate核心类—Transaction接口Transaction接口是对实际事务实现的一个抽象,这些实现包括JDBC的事务、JTA中的UserTransaction、甚至可以是CORBA事务。之所以这样设计是能让开发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移值。获取:Transactiontrans=session.beginTransaction();注意:事务编程中,一定要有事务的提交mit();六、Hibernate核心类—Transaction接口T六、Hibernate核心类—Query和Criteria类Query类让方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作,如:Stringhql="fromPerson";Queryq=session.createQuery(hql);ListrsList=q.list();六、Hibernate核心类—Query和Criteria实践练习结合Struts框架,实现员工信息的CRUD管理。实践练习结合Struts框架,实现员工信息的CRUD管理。演讲完毕,谢谢观看!演讲完毕,谢谢观看!J2EE企业级应用开发—Hibernate框架J2EE企业级应用开发任务1开发第一个Hibernate应用

Hibernate3-1环境及基础配置课件本任务主要内容数据持久化与ORMHibernate框架基础搭建Hibernate的开发环境Hibernate的基础配置Hibernate的生命周期Hibernate的常用API本任务主要内容数据持久化与ORM知识目标了解数据的持久化与ORM了解Hibernate3的工作原理掌握Hibernate3进行数据持久化的使用掌握Hibernate3的配置和映射理解Hibernate的生命周期能力目标能理解Hibernate的作用能开发第一个Hibernate程序能在Web开发中综合struts和Hibernate能使用Hibernate的相关类实现数据持久化操作知识目标一、持久化与ORM持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。持久层就是专门负责持久化工作的逻辑层,由它统一与数据库层打交道持久层包括一个业务领域实体的模型,在持久层中封装对数据库访问的细节,向业务逻辑公开接口。一、持久化与ORM持久化(Persistence),即把数据持久化与ORM面向对象程序设计语言与关系数据库发展不同步时,需要一种中间解决方案,ORM(

Object/RelationMapping)框架就是这样的解决方案。ORM是一类框架的总称,它概述了这类框架的基本特征:完成面向对象的程序设计语言到关系数据库的映射。将关系数据库中数据用对象的形式表现,并用面向对象的方式组织对象,实现系统的业务逻辑。基于ORM框架完成映射后,既可利用面向对象程序设计语言的简单易用性,又可利用关系数据库的技术优势。持久化与ORM面向对象程序设计语言与关系数据库发展不同步时,持久化与ORM持久化与ORM常见ORM框架目前ORM框架的产品非常多,除了各大著名公司、组织的产品外,甚至,其他一些小团队也都有推出自己的ORM框架。目前流行的ORM框架有如下这些产品。传统的EntityEJB,Hibernate,IBATIS,Oracle的TopLink,OJB,JPA(JavaPersistenceAPI)常见ORM框架目前ORM框架的产品非常多,除了各大著名公司、二、Hibernate概述—简介Hibernate是目前最流行的开源的持久层框架ORM框架,它是一个面向Java环境的对象/关系数据库映射工具。Hibernate也是一个轻量级的O/RMapping框架,建立面向对象的域模型和关系数据模型之间的映射,是连接java应用和数据库的中间件。Hibernate对JDBC进行封装,负责java对象的持久化。真正实现了开发者采用面向对象的方式来操作关系数据库。Hibernate在分层结构中处于持久化层,封装对数据库的访问细节,使业务逻辑层更专注于实现业务逻辑。二、Hibernate概述—简介Hibernate是目前最流Hibernate概述—优点Hibernate能在众多的ORM框架中脱颖而出,因为Hibernate与其他ORM框架对比具有如下优势:Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。开源和免费的License,方便需要时研究源代码、改写源代码、进行功能定制。Hibernate的性能非常好,因为它是一个轻量级框架。映射的灵活性很出色。它支持很多关系型数据库,从一对一到多对多的各种复杂关系。Hibernate是一个基于jdbc的主流持久化框架,是一个优秀的ORM实现,它很大程度的简化了dao层编码工作。

Hibernate概述—优点Hibernate能在众多的ORHibernate概述—体系结构在分层体系架构中,Hibernate负责应用程序与数据库之间的数据交换,起ORM中间件的作用,使得应用程序通过Hibernate的API就可以访问数据库。Hibernate使用数据库和配置信息来为应用程序提供持久化服务(以及持久的对象)配置连接相关信息配置对象和表的映射关系Hibernate概述—体系结构在分层体系架构中,Hiber

Hibernate概述-对象持久化概述Hibernate中间件:Hibernate不和特定的业务领域相关,能够把任意一个Java应用与数据库系统连接,可以理解为是一种中间件。应用1业务逻辑层应用2业务逻辑层应用3业务逻辑层持久化层(hibernate)数据库1数据库2数据库3持久化层封装了数据访问的细节,为业务逻辑层提供了面向对象的API。完善的持久化层应该达到的目标:1.代码重用性高,可完成所有的数据访问操作。2.如果需要的话,能够支持多种数据库平台。3.具有相对独立性,当持久化层变化时,不会影响上层实现。Hibernate概述-对象持久化概述Hibernate中publicListgetAllEmpl(){Listlist=newArrayList();//?¡§¨¢¡é¨¢??¨®con=newDBCon().getConn();Stringsql="select*fromtb_empl";try{pstmt=con.prepareStatement(sql);rs=pstmt.executeQuery();intid;Stringempl_id,empl_name,empl_depart,sex,intime,bz,interest,empl_pass1,prov,city;while(rs.next()){id=rs.getInt(1);empl_id=rs.getString(2);empl_name=rs.getString(3);empl_pass1=rs.getString(4);sex=rs.getString(5);interest=rs.getString(6);empl_depart=rs.getString(7);prov=rs.getString(8);city=rs.getString(9);intime=rs.getString(10);bz=rs.getString(11);Emple=newEmpl();e.setId(id);e.setEmpl_id(empl_id);e.setEmpl_name(empl_name);e.setEmpl_pass1(empl_pass1);e.setSex(sex);e.setInterest(interest);e.setEmpl_depart(empl_depart);e.setProv(prov);e.setCity(city);e.setIntime(intime);e.setBz(bz);list.add(e);}}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}returnlist;}1.简化开发过程2.业务逻辑与数据逻辑相分离(业务人员不需要考虑数据表的逻辑结构)3.数据访问逻辑与物理数据库的结构相分离(数据访问逻辑的开发者不再关心不同的物理数据库的差异性)JDBC查询数据,并添加数据到列表中。Sessionsession=HibernateSessionFactory.getSession();Queryquery=session.createQuery("fromtb_empl");Listallempls=query.list();ORMpublicListgetAllEmpl(){1.简化三、Hibernate3的应用—使用步骤在应用中使用Hibernate,首先必须进行Hibernate与数据库驱动、连接设置、ORM映射文件的创建等。使用Hibernate的开发步骤如下:设计:一般首先进行领域对象的设计。因为在Hibernate中,我们的领域对象可以直接充当持久化类。映射:定义Hibernate的映射文件,实现持久化类和数据库之间映射。应用:使用Hibernate提供的API,实现具体的持久化业务。三、Hibernate3的应用—使用步骤在应用中使用Hibe第一个Hibernate程序的开发—1加载包Hibernate并不依赖于任何服务器和框架,只要把Hibernate的jar包添加即可。方法:1.官网下载Hibernate包后加载必备包2.MyEclipse->ProjectCapabilities->addHibernateCapabilities第一个Hibernate程序的开发—1加载包Hibernat第一个Hibernate程序的开发—2创建数据库及表创建数据库并创建数据表person,包括属性:id,name,age.其中:主键id字段设为自动增长,对应于实体类中的id属性。第一个Hibernate程序的开发—2创建数据库及表创建数第一个Hibernate程序的开发—3创建持久化类在Hibernate中是直接使用POJO来作为持久化类的。持久化类符合JavaBean的规范,包含:属性(一般有一个id,作为OID)、无参构造方法、getter和setter方法。在Web编程中,为了在会话中对Java对象进行持久化,一般要实现Serializable接口。示例:定义持久化类Person第一个Hibernate程序的开发—3创建持久化类在Hib第一个Hibernate程序的开发—4编写配置文件Hibernate的核心配置文件是hibernate.cfg.xml,也可以为perties。在此文件中配置了用于连接数据库的信息和一些全局配置,

一般直接放在src目录下。可在MyEclipse下创建相应的数据库连接,添加Hibernate功能包时,直接使用连接,自动生成配置文件。示例:创建配置文件hibernate.cfg.xml第一个Hibernate程序的开发—4编写配置文件Hibe<?xmlversion='1.0'encoding='UTF-8'?><!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN"“/hibernate-configuration-3.0.dtd”><hibernate-configuration><session-factory><propertyname="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property><propertyname="connection.url">jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs</property><propertyname="connection.username">sa</property><propertyname="connection.password">123</property><propertyname="dialect">org.hibernate.dialect.SQLServerDialect</property><propertyname="file">mysqlserver</property>

<mappingresource=“com/hibernate/person.hbm.xml"/>

</session-factory></hibernate-configuration>

<?xmlversion='1.0'encoding='第一个Hibernate程序的开发—5编写映射文件映射文件实现数据库字段与持久化类属性匹配。在hibernate中习惯的命名为“*.hbm.xml”文件,一般映射文件与其对应的持久化类在同一级目录中。可以在MyEclipse中用反向工程生成。示例:创建映射文件person.hbm.xml第一个Hibernate程序的开发—5编写映射文件映射文件<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"“/hibernate-mapping-3.0.dtd”><hibernate-mapping>

<classname=“com.hibernate.Person"table="tb_person"><idname="id"type="integer"><columnname="id"/><generatorclass="native"></generator></id>

<propertyname=“name"type="string"><columnname="name"length="50"not-null="true"/></property>

<propertyname=“age"type=“integer"><column

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论