书签 分享 收藏 举报 版权申诉 / 45
上传文档赚钱

类型15-Hibernate组件框架.ppt

  • 上传人(卖家):hwpkd79526
  • 文档编号:5668168
  • 上传时间:2023-04-30
  • 格式:PPT
  • 页数:45
  • 大小:642KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《15-Hibernate组件框架.ppt》由用户(hwpkd79526)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    15 Hibernate 组件 框架
    资源描述:

    1、Hibernate组件框架目标u了解持久层概述u了解Hibernate的基本组件及接口u掌握基础语法u熟悉基础配置u了解基于hibernate的开发流程及简单应用u理解持久化对象的生命周期Hibernate?u直接使用JDBC操作数据库的步骤很繁琐uJDBC操作的是关系型数据库u我们用JAVA开发程序,则使用面向对象的思想uHibernate正是在这两种不同的模型之间建立关联,Hibernate给我们提供了利用面向对象的思想来操作关系型数据的接口什么是关系模型(Relational Model)?u 关系模型把世界看作是由实体(Entity)和联系(Relationship)构成的。u 所谓实

    2、体就是指现实世界中具有区分与其它事物的特征或属性并与其它实体有联系的对象。在关系模型中实体通常是以表的形式来表现的。表的每一行描述实体的一个实例,表的每一列描述实体的一个特征或属性。u 所谓联系就是指实体之间的关系,即实体之间的对应关系。1:1 1:n m:n u 关系数据库 表 字段 主键 外键什么是面向对象?u 面向对象三大特征:封装、继承(一般与特殊)、多态(覆盖与重载)u 类u 对象u 属性u 关系 一般与特殊关系(is a)组成(has a)关联及其多重性 1:1 1:n m:n 双向关联与单向关联对象关系映射(Object Relational Mapping,简称ORM)u OR

    3、M是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。u Why ORM?面向对象的开发方法是当今企业级应用开发环境中的主流开发方法 关系数据库是企业级应用环境中永久存放数据的主流数据存储系统 u 字母O起源于“对象”(Object),而R则来自于“关系”(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和呈现层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。u

    4、 当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。而这些代码写起来总是重复的。什么是Hibernate?u 对象/关系映射一直都是数据库技术中的难点,尽管人们提出了许多方案解决这个问题,但都不能完全做到即便利又高效。EJB的推出让人们看到了希望,但实践证明实体Bean的效率并不高,并且还十分难于为初学者理解。由Gavin King创建的Hibernate框架,从某种程序上正在朝着正确的方向迈走,并且得到越来越多IT从业人员的认可。就像当年的Struts框架一样,Hibernate也已经在许多项目中得到广泛应

    5、用。Hibernate由于投注了更多的精力在提升效率上,使用起来又十分方便,新版的EJB规范正在向Hibernate方向靠拢。正是由于得到广泛的认可,Hibernate已经成为程序员必须掌握的技术之一。Hibernate能做什么?-理解O/R映射u Hibernate能帮助我们利用面向对象面向对象的思想,开发基于关系型基于关系型数据库数据库的应用程序第一:将对象数据保存到数据库第二:将数据库数据读入对象中u 基于B/S的典型三层架构关于分层关于分层 业务逻辑层和持久化层绝对不能依赖于展现层持久化与持久层u 什么是持久化?什么是持久化?u 将数据保存到物理的储存器(硬盘、磁带等)上的过程叫持久化

    6、。u 什么是持久层?什么是持久层?u 专门负责处理与物理数据相关操作(持久化数据,以供日后使用)的独立层次。u“持久化持久化”与与“持久层持久层”之间的关系?之间的关系?u 持久化是动词,表示将内存中的数据存储到数据库或其他媒介。u 持久层是名词,实现数据持久化的一个相对独立的领域(层),将数据使用者与数据实体相分离。问题:问题:上图中哪些具有持久化过程?哪些具有持久层?问题:问题:上图中哪些具有持久化过程?哪些具有持久层?问题:问题:上图中哪些具有持久化过程?哪些具有持久层?问题:问题:上图中哪些具有持久化过程?哪些具有持久层?持久层与MVC持久层解决了什么问题?持久层解决了什么问题?当发生

    7、以下三种情况的时候,数据持久化代码不需要重新编译(1)表示层发生变化(2)业务逻辑层发生变化(3)底层数据格式或持久化机制发生变化Hibernate与O、R之间的关系快速起步准备工作快速起步准备工作:下载地址http:/www.hibernate.org。将下载目录/hibernate3.jar和/lib下的hibernate运行时必须的包加入classpath中:commons-collections.jar,commons-logging.jar,antlr.jar,cglib.jar,asm.jar,jta.jar,dom4j.jar第一个Hibernate应用 u 教学目标 创建Hib

    8、ernate的配置文件 创建持久化类 创建数据库Schema 创建对象-关系映射文件 映射文件的文档类型定义(DTD)把Customer持久化类映射到CUSTOMERS表 通过Hibernate API操纵数据库在Java应用中使用Hibernate的步骤u创建Hibernate的配置文件u创建持久化类u创建对象-关系映射文件u通过Hibernate API编写访问数据库的代码Helloapp应用的结构Hibernate的配置文件(hibernate.properties)hibernate.dialect=org.hibernate.dialect.MySQLDialecthibernate

    9、.connection.driver_class=com.mysql.jdbc.Driverhibernate.connection.url=jdbc:mysql:/localhost:3306/SAMPLEDB hibernate.connection.username=roothibernate.connection.password=1234hibernate.show_sql=trueHibernate配置文件的属性创建持久化类Customeru 持久化类符合JavaBean的规范,包含一些属性,以及与之对应的getXXX()和setXXX()方法。u 持久化类有一个id属性,用来惟一

    10、标识Customer类的每个对象。在面向对象术语中,这个id属性被称为对象标识符(OID,Object Identifier),通常它都用整数表示 u Hibernate要求持久化类必须提供一个不带参数的默认构造方法 创建数据库Schema create table CUSTOMERS(ID bigint not null primary key,NAME varchar(15)not null,EMAIL varchar(128)not null,PASSWORD varchar(8)not null,PHONE int,ADDRESS varchar(255),SEX char(1),IS

    11、_MARRIED bit,DESCRIPTION text,IMAGE blob,BIRTHDAY date,REGISTERED_TIME timestamp);blob (二进制大数据)binary large object创建对象-关系映射文件Customer.hbm.xml 元素映射OIDu 子元素用来设定标识符生成器。Hibernate提供了提供了多种内置的实现。MySQL中:ID bigint auto_increment primary key元素映射值类型属性uname属性:指定持久化类的属性的名字。ucolumn属性:指定与类的属性映射的表的字段名。utype属性:指定Hib

    12、ernate映射类型。Hibernate映射类型是Java类型与SQL类型的桥梁。u Java类型:StringSQL类型:varcharHibernate类型:stringJava类型、类型、Hibernate映射类型以及映射类型以及SQL类型之间的对应关系类型之间的对应关系 Customer.hbm.xml配置的对象-关系映射 classesmypackCustomer.classclassesmypackCustomer.hbm.xml采用采用XML文件来配置对象文件来配置对象-关系映射的优点关系映射的优点uHibernate既不会渗透到上层域模型中,也不会渗透到下层数据模型中。u软件开

    13、发人员可以独立设计域模型,不必强迫遵守任何规范。u数据库设计人员可以独立设计数据模型,不必强迫遵守任何规范。u对象-关系映射不依赖于任何程序代码,如果需要修改对象-关系映射,只需修改XML文件,不需要修改任何程序,提高了软件的灵活性,并且使维护更加方便。通过通过HibernateAPI操纵数据库操纵数据库 通过通过HibernateAPI操纵数据库操纵数据库 创建创建BusinessService类类 u初始化Hibernateu通过Hibernate的Session接口操纵数据库:保存Customer对象 更新Customer对象 加载Customer对象 删除Customer对象 检索Cu

    14、stomer对象Hibernate的初始化的初始化 static try /根据默认位置的Hibernate配置文件的配置信息,创建一个 /Configuration实例 Configuration config=new Configuration();config.addClass(Customer.class);/创建SessionFactory实例*/sessionFactory=config.buildSessionFactory();catch(Exception e)e.printStackTrace();Hibernate的初始化的初始化 u(1)创建一个Configuratio

    15、n类的实例,Configuration类的构造方法把默认文件路径下的hibernate.properties配置文件中的配置信息读入到内存:Configuration config=new Configuration();u(2)调用Configuration类的addClass(Customer.class)方法:config.addClass(Customer.class);该方法把默认文件路径下的Customer.hbm.xml文件中的映射信息读入到内存中。u(3)调用Configuration类的buildSessionFactory()方法:sessionFactory=config

    16、.buildSessionFactory();SessionFactory接口接口 u一个SessionFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例。SessionFactory有以下特点:它是线程安全的,这意味着它的同一个实例可以被应用的多个线程共享。它是重量级的,这意味着不能随意创建或销毁它的实例。如果应用只访问一个数据库,只需要创建一个SessionFactory实例,在应用初始化的时候创建该实例。如果应用同时访问多个数据库,则需要为每个数据库创建一个单独的SessionFactory实例。Session接口接口 uSession接口是

    17、Hibernate应用使用最广泛的接口。uSession也被称为持久化管理器,它提供了和持久化相关的操作,如添加、更新、删除、加载和查询对象。uSession有以下特点:不是线程安全的,因此在设计软件架构时,应该避免多个线程共享同一个Session实例。Session实例是轻量级的,所谓轻量级是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建或销毁Session对象,例如为每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。Session接口操纵数据库的方法uSession接口提供了操纵数据库的各种方法,如:save()方法:把Java对

    18、象保存数据库中。update()方法:更新数据库中的Java对象。delete()方法:把Java对象从数据库中删除。load()或get()方法:从数据库中加载Java对象。find()方法:从数据库中查询Java对象。在 Hibernate3中,该方法已经被废弃。Hibernate提供了专门的Query查询接口。用用Session来执行事务的流程来执行事务的流程 Session session=factory.openSession();Transaction tx;try /开始一个事务 tx=session.beginTransaction();/执行事务 ./提交事务 mit();c

    19、atch(Exception e)/如果出现异常,就撤销事务 if(tx!=null)tx.rollback();throw e;finally /不管事务执行成功与否,最后都关闭Session session.close();正常执行数据库事务的流程正常执行数据库事务的流程 saveCustomer()方法u 该方法调用Session的save()方法,把Customer对象持久化到数据库中。tx=session.beginTransaction();session.save(customer);mit();u 当运行session.save()方法时,Hibernate执行以下SQL语句:

    20、insert into CUSTOMERS(ID,NAME,EMAIL,PASSWORD,PHONE,ADDRESS,SEX,IS_MARRIED,DESCRIPTION,IMAGE,BIRTHDAY,REGISTERED_TIME)values(1,Tom,1234,55556666,Shanghai,M,0,I am very honest.,1980-05-06,null)u 在test()方法中并没有设置Customer对象的id属性,Hibernate会根据映射文件的配置,采用increment标识符生成器自动以递增的方式为OID赋值。在Customer.hbm.xml文件中相关的映

    21、射代码如下:findAllCustomers()方法u 该方法通过Query接口查询所有的Customer对象。tx=session.beginTransaction();/开始一个事务Query query=session.createQuery(from Customer as c order by c.name asc);List customers=query.list();for(Iterator it=customers.iterator();it.hasNext();)printCustomer(context,out,(Customer)it.next();mit();/提交事

    22、务u Session的createQuery()方法的参数“from Customer as c order by c.name asc”使用的是Hibernate查询语言。运行Query.list()方法时,Hibernate执行以下SQL语句:select*from CUSTOMERS order by NAME asc;HQL查询语句Hibernate Query LanguageloadAndUpdateCustomer()方法u 该方法调用Session的get()方法,加载Customer对象,然后再修改Customer对象的属性。tx=session.beginTransacti

    23、on();Customer c=(Customer)session.get(Customer.class,customer_id);c.setAddress(address);/修改内存中Customer对象的address属性 mit();u 以上代码先调用Session的get()方法,它按照参数指定的OID从数据库中检索出匹配的Customer对象,Hibernate会执行以下SQL语句:select*from CUSTOMERS where ID=1;u loadAndUpdateCustomer()方法接着修改Customer对象的address属性。那么,Hibernate会不会同

    24、步更新数据库中相应的CUSTOMERS表的记录呢?答案是肯定的。Hibernate采用脏检查机制,按照内存中的Customer对象的状态的变化,来同步更新数据库中相关的数据,Hibernate会执行以下SQL语句:update CUSTOMERS set NAME=Tom,EMAIL=TADDRESS=Beijing where ID=1;u 尽管只有Customer对象的address属性发生了变化,但是Hibernate执行的update语句中会包含所有的字段。内存Session对象的缓存loadAndUpdateCustomer()方法CUSTOMERS记录Customer对象加载同步更

    25、新当Customer对象位于Session对象的缓存中,当Customer对象的属性发生变化,Session对象会自动同步更新数据库。deleteCustomer()方法u该方法调用Session的delete()方法,删除特定的Customer对象:tx=session.beginTransaction();session.delete(customer);mit();u运行session.delete()方法时,Hibernate根据Customer对象的OID,执行以下SQL delete语句:delete from CUSTOMERS where ID=1;持久化对象的生命周期(lif

    26、ecycle)Customer对象的状态转换过程 用用Session的的update()方法关联游离对象方法关联游离对象Customercustomer=newCustomer();customer.setName(Tom);Sessionsession1=sessionFactory.openSession();Transactiontx1=session1.beginTransaction();session1.save(customer);mit();/此时此时Customer对象变为游离对象对象变为游离对象session1.close();Sessionsession2=session

    27、Factory.openSession();Transactiontx2=session2.beginTransaction();/在和在和session2关联之前修改关联之前修改Customer对象的属性对象的属性customer.setName(Linda);session2.update(customer);/在和在和session2关联之后修改关联之后修改Customer对象的属性对象的属性customer.setName(Jack);mit();session2.close();Session的的update()方法方法u Session的的update()方法完成以下操作:方法完成

    28、以下操作:(1)把)把Customer对象重新加入到对象重新加入到Session缓存中,使缓存中,使它变为持久化对象。它变为持久化对象。(2)计划执行一个)计划执行一个update语句。值得注意的是,语句。值得注意的是,Session只有在清理缓存的时候才会执行只有在清理缓存的时候才会执行update语句,语句,并且在执行时才会把并且在执行时才会把Customer对象当前的属性值组装对象当前的属性值组装到到update语句中。因此,即使程序中多次修改了语句中。因此,即使程序中多次修改了Customer对象的属性,在清理缓存时只会执行一次对象的属性,在清理缓存时只会执行一次update语句。语句。

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:15-Hibernate组件框架.ppt
    链接地址:https://www.163wenku.com/p-5668168.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库