J2EE企业级应用开发—Hibernate框架任务1开发第一个Hibernate应用本任务主要内容数据持久化与ORMHibernate框架基础搭建Hibernate的开发环境Hibernate的基础配置Hibernate的生命周期Hibernate的常用API知识目标了解数据的持久化与ORM了解Hibernate3的工作原理掌握Hibernate3进行数据持久化的使用掌握Hibernate3的配置和映射理解Hibernate的生命周期能力目标能理解Hibernate的作用能开发第一个Hibernate程序能在Web开发中综合struts和Hibernate能使用Hibernate的相关类实现数据持久化操作一、持久化与ORM持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。持久层就是专门负责持久化工作的逻辑层,由它统一与数据库层打交道持久层包括一个业务领域实体的模型,在持久层中封装对数据库访问的细节,向业务逻辑公开接口。持久化与ORM面向对象程序设计语言与关系数据库发展不同步时,需要一种中间解决方案,ORM(Object/RelationMapping)框架就是这样的解决方案。ORM是一类框架的总称,它概述了这类框架的基本特征:完成面向对象的程序设计语言到关系数据库的映射。将关系数据库中数据用对象的形式表现,并用面向对象的方式组织对象,实现系统的业务逻辑。基于ORM框架完成映射后,既可利用面向对象程序设计语言的简单易用性,又可利用关系数据库的技术优势。持久化与ORM常见ORM框架目前ORM框架的产品非常多,除了各大著名公司、组织的产品外,甚至,其他一些小团队也都有推出自己的ORM框架。目前流行的ORM框架有如下这些产品。传统的EntityEJB,Hibernate,IBATIS,Oracle的TopLink,OJB,JPA(JavaPersistenceAPI)二、Hibernate概述—简介Hibernate是目前最流行的开源的持久层框架ORM框架,它是一个面向Java环境的对象/关系数据库映射工具。Hibernate也是一个轻量级的O/RMapping框架,建立面向对象的域模型和关系数据模型之间的映射,是连接java应用和数据库的中间件。Hibernate对JDBC进行封装,负责java对象的持久化。真正实现了开发者采用面向对象的方式来操作关系数据库。Hibernate在分层结构中处于持久化层,封装对数据库的访问细节,使业务逻辑层更专注于实现业务逻辑。Hibernate概述—优点Hibernate能在众多的ORM框架中脱颖而出,因为Hibernate与其他ORM框架对比具有如下优势:Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。开源和免费的License,方便需要时研究源代码、改写源代码、进行功能定制。Hibernate的性能非常好,因为它是一个轻量级框架。映射的灵活性很出色。它支持很多关系型数据库,从一对一到多对多的各种复杂关系。Hibernate是一个基于jdbc的主流持久化框架,是一个优秀的ORM实现,它很大程度的简化了dao层编码工作。Hibernate概述—体系结构在分层体系架构中,Hibernate负责应用程序与数据库之间的数据交换,起ORM中间件的作用,使得应用程序通过Hibernate的API就可以访问数据库。Hibernate使用数据库和配置信息来为应用程序提供持久化服务(以及持久的对象)配置连接相关信息配置对象和表的映射关系Hibernate概述-对象持久化概述Hibernate中间件:Hibernate不和特定的业务领域相关,能够把任意一个Java应用与数据库系统连接,可以理解为是一种中间件。应用1业务逻辑层应用2业务逻辑层应用3业务逻辑层持久化层(hibernate)数据库1数据库2数据库3持久化层封装了数据访问的细节,为业务逻辑层提供了面向对象的API。完善的持久化层应该达到的目标:1.代码重用性高,可完成所有的数据访问操作。2.如果需要的话,能够支持多种数据库平台。3.具有相对独立性,当持久化层变化时,不会影响上层实现。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();ORM三、Hibernate3的应用—使用步骤在应用中使用Hibernate,首先必须进行Hibernate与数据库驱动、连接设置、ORM映射文件的创建等。使用Hibernate的开发步骤如下:设计:一般首先进行领域对象的设计。因为在Hibernate中,我们的领域对象可以直接充当持久化类。映射:定义Hibernate的映射文件,实现持久化类和数据库之间映射。应用:使用Hibernate提供的API,实现具体的持久化业务。第一个Hibernate程序的开发—1加载包Hibernate并不依赖于任何服务器和框架,只要把Hibernate的jar包添加即可。方法:1.官网下载Hibernate包后加载必备包2.MyEclipse-ProjectCapabilities-addHibernateCapabilities第一个Hibernate程序的开发—2创建数据库及表创建数据库并创建数据表person,包括属性:id,name,age.其中:主键id字段设为自动增长,对应于实体类中的id属性。第一个Hibernate程序的开发—3创建持久化类在Hibernate中是直接使用POJO来作为持久化类的。持久化类符合JavaBean的规范,包含:属性(一般有一个id,作为OID)、无参构造方法、getter和setter方法。在Web编程中,为了在会话中对Java对象进行持久化,一般要实现Serializable接口。示例:定义持久化类Person第一个Hibernate程序的开发—4编写配置文件Hibernate的核心配置文件是hibernate.cfg.xml,也可以为hibernate.properties。在此文件中配置了用于连接数据库的信息和一些全局配置,一般直接放在src目录下。可在MyEclipse下创建相应的数据库连接,添加Hibernate功能包时,直接使用连接,自动生成配置文件。示例:创建配置文件hibernate.cfg.xml?xmlversion='1.0'encoding='UTF-8'?!DOCTYPEhibernate-configurationPUBLIC-//Hibernate/HibernateConfigurationDTD3.0//EN“”hibernate-configurationsession-factorypropertyname=connection.driver_classcom.microsoft.jdbc.sqlserver.SQLServerDriver/propertypropertyname=connection.urljdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs/propertypropertyname=connection.usernamesa/propertypropertyname=connection.password123/propertypropertyname=dialectorg.hibernate.dialect.SQLServerDialect/propertypropertyname=myeclipse.connection.profilemysqlserver/propertymappingresource=“com/hibernate/person.hbm.xml//session-factory/hibernate-configuration第一个Hibernate程序的开发—5编写映射文件映射文件实现数据库字段与持久化类属性匹配。在hibernate中习惯的命名为“*.hbm.xml”文件,一般映射文件与其对应的持久化类在同一级目录中。可以在MyEclipse中用反向工程生成。示例:创建映射文件person.hbm.xml?xmlversion=1.0encoding=utf-8?!DOCTYPEhibernate-mappingPUBLIC-//Hibernate/HibernateMappingDTD3.0//EN“”hibernate-mappingclassname=“com.hibernate.Persontable=tb_personidname=idtype=integercolumnname=id/generatorclass=native