欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Hibernate组件框架.ppt

    • 资源ID:34134003       资源大小:1.40MB        全文页数:46页
    • 资源格式: PPT        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Hibernate组件框架.ppt

    Hibernate组件框架组件框架Hibernate?u直接使用JDBC操作数据库的步骤很繁琐uJDBC操作的是关系型数据库u我们用JAVA开发程序,则使用面向对象的思想uHibernate正是在这两种不同的模型之间建立关联,Hibernate给我们提供了利用面向对象的思想来操作关系型数据的接口什么是关系模型(Relational Model)?u 关系模型把世界看作是由实体(Entity)和联系(Relationship)构成的。 u 所谓实体就是指现实世界中具有区分与其它事物的特征或属性并与其它实体有联系的对象。在关系模型中实体通常是以表的形式来表现的。表的每一行描述实体的一个实例,表的每一列描述实体的一个特征或属性。 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 ORM是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 u Why ORM? 面向对象的开发方法是当今企业级应用开发环境中的主流开发方法 关系数据库是企业级应用环境中永久存放数据的主流数据存储系统 u 字母O起源于“对象”(Object),而R则来自于“关系”(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和呈现层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。 u 当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。而这些代码写起来总是重复的。 Hibernate是一个优秀的持久化框架 什么是持久化?内存内存姓名:小颖姓名:小颖性别:女性别:女特长:英语、程序设计特长:英语、程序设计瞬时状态瞬时状态磁盘磁盘持久状态持久状态用用JDBC完成数据在持久和瞬时状完成数据在持久和瞬时状态间的转换态间的转换:stmt.execute ( ).瞬时状态:瞬时状态:保存在内存的程序数据,程序退出保存在内存的程序数据,程序退出后,数据就消失了,称为瞬时状态后,数据就消失了,称为瞬时状态持久状态:持久状态:保存在磁盘上的程序数据,程序退保存在磁盘上的程序数据,程序退出后依然存在,称为程序数据的持出后依然存在,称为程序数据的持久状态久状态持久化:持久化:将程序数据在瞬时状态和持久状态将程序数据在瞬时状态和持久状态之间转换的机制之间转换的机制持久化持久化Hibernate是一个主流的ORM框架 什么是ORM?对象数据(对象数据( )name:小颖:小颖sex:女:女skill:英语、程序设计:英语、程序设计User对象对象持久化层持久化层业务逻辑层业务逻辑层表现层表现层数据库数据库TBL_User表表关系型数据关系型数据( ) 映射信息映射信息ORM(对象(对象-关系映射):关系映射):完成对象数据到关系型数据映射的完成对象数据到关系型数据映射的机制称为对象机制称为对象-关系映射,简称关系映射,简称ORM。什么是Hibernate?u 对象/关系映射一直都是数据库技术中的难点,尽管人们提出了许多方案解决这个问题,但都不能完全做到即便利又高效。EJB的推出让人们看到了希望,但实践证明实体Bean的效率并不高,并且还十分难于为初学者理解。由Gavin King创建的Hibernate框架,从某种程序上正在朝着正确的方向迈走,并且得到越来越多IT从业人员的认可。就像当年的Struts框架一样,Hibernate也已经在许多项目中得到广泛应用。Hibernate由于投注了更多的精力在提升效率上,使用起来又十分方便,新版的EJB规范正在向Hibernate方向靠拢。正是由于得到广泛的认可,Hibernate已经成为程序员必须掌握的技术之一。Hibernate能做什么? - 理解O/R映射u Hibernate能帮助我们利用面向对象面向对象的思想,开发基于关系型基于关系型数据库数据库的应用程序第一:将对象数据保存到数据库第二:将数据库数据读入对象中u 基于B/S的典型三层架构关于分层关于分层 业务逻辑层和持久化层绝对不能依赖于展现层持久化与持久层什么是持久化?什么是持久化?将数据保存到物理的储存器(硬盘、磁带等)上的过程叫持久化。 什么是持久层?什么是持久层?专门负责处理与物理数据相关操作(持久化数据,以供日后使用)的独立层次。 “持久化持久化”与与“持久层持久层”之间的关系?之间的关系?持久化是动词,表示将内存中的数据存储到数据库或其他媒介。持久层是名词,实现数据持久化的一个相对独立的领域(层),将数据使用者与数据实体相分离。问题:问题:上图中哪些具有持久化过程?哪些具有持久层?问题:问题:上图中哪些具有持久化过程?哪些具有持久层?问题:问题:上图中哪些具有持久化过程?哪些具有持久层?问题:问题:上图中哪些具有持久化过程?哪些具有持久层?持久层与MVC持久层解决了什么问题?持久层解决了什么问题?当发生以下三种情况的时候,数据持久化代码不需要重新编译(1)表示层发生变化(2)业务逻辑层发生变化(3)底层数据格式或持久化机制发生变化Hibernate与O、R之间的关系使用Hibernate实现用户添加 使用Hibernate的7个步骤: 使用Hibernate实现用户添加 七个步骤对应的程序代码public static void main(String args) Configuration conf = new Configuration().configure();/1、读取配置文件、读取配置文件 SessionFactory sf = conf.buildSessionFactory();/ 2、创建、创建SessionFactory Session session = sf.openSession();/ 3、打开、打开Session Transaction tx = null; try tx = session.beginTransaction();/ 4、开始一个事务、开始一个事务 / 5、持久化操作、持久化操作 User user = new User(); user.setUname(Hibernate user); user.setUpass(password); session.save(user); mit();/ 6、 提交事务提交事务 catch(Exception e) if (null!=tx)tx.rollback(); e.printStackTrace(); finally session.close();/ 7、关闭、关闭Session 执行结果执行结果Hibernate执行过程Configuration SessionFactory SessionTransaction创建创建创建创建开始开始save delete update get mit() session.close()执行执行Hibernate.cfg.xmlFWXX.cfg.xmlUser.hbm.xml结束结束创建和销毁都相当耗费创建和销毁都相当耗费资源,通常一个系统内资源,通常一个系统内一个数据库只创建一个一个数据库只创建一个类似于类似于JDBC中的中的Connection 复杂的查询操作稍后介绍复杂的查询操作稍后介绍 使用Hibernate实现数据的加载/删除/修改 程序代码Session session = sf.openSession();User user = (User)session.get(User.class, id);session.close();System.out.println(user.getUname() + , + user.getUpass();根据主键加载根据主键加载tx = session.beginTransaction();User user = this.testLoad(id);user.setUname(new Name);session.update(user);mit();修改修改tx = session.beginTransaction();User user = this.testLoad(id);session.delete(user);mit();删除删除没有更新数据,没有更新数据,不进行事务控不进行事务控制制先加载,再更新先加载,再更新不再需要繁琐的逐字不再需要繁琐的逐字段编码段编码先加载,先加载,再删除再删除演示示例:演示示例:HibTest2.javaHibernate的配置文件(hibernate.properties) hibernate.dialect=org.hibernate.dialect.MySQLDialecthibernate.connection.driver_class=com.mysql.jdbc.Driverhibernate.connection.url=jdbc:mysql:/localhost:3306/SAMPLEDB hibernate.connection.username=roothibernate.connection.password=1234hibernate.show_sql=trueHibernate配置文件的属性创建持久化类Customer持久化类符合JavaBean的规范,包含一些属性,以及与之对应的getXXX()和setXXX()方法。 持久化类有一个id属性,用来惟一标识Customer类的每个对象。在面向对象术语中,这个id属性被称为对象标识符(OID,Object Identifier),通常它都用整数表示 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_MARRIED bit, DESCRIPTION text, IMAGE blob, BIRTHDAY date, REGISTERED_TIME timestamp);blob (二进制大数据)binary large object创建对象-关系映射文件Customer.hbm.xml 元素映射OID子元素用来设定标识符生成器。Hibernate提供了提供了多种内置的实现。 MySQL中:ID bigint auto_increment primary key元素映射值类型属性 name属性:指定持久化类的属性的名字。 column属性:指定与类的属性映射的表的字段名。 type属性:指定Hibernate映射类型。Hibernate映射类型是Java类型与SQL类型的桥梁。Java类型:StringSQL类型:varcharHibernate类型:stringJava类型、类型、Hibernate映射类型以及映射类型以及SQL类型之间的对应关系类型之间的对应关系 Customer.hbm.xml配置的对象-关系映射 classesmypackCustomer.classclassesmypackCustomer.hbm.xml采用采用XML文件来配置对象文件来配置对象-关系映射的优点关系映射的优点 Hibernate既不会渗透到上层域模型中,也不会渗透到下层数据模型中。 软件开发人员可以独立设计域模型,不必强迫遵守任何规范。 数据库设计人员可以独立设计数据模型,不必强迫遵守任何规范。 对象-关系映射不依赖于任何程序代码,如果需要修改对象-关系映射,只需修改XML文件,不需要修改任何程序,提高了软件的灵活性,并且使维护更加方便。通过通过Hibernate API操纵数据库操纵数据库 通过通过Hibernate API操纵数据库操纵数据库 创建创建BusinessService类类 初始化Hibernate 通过Hibernate的Session接口操纵数据库: 保存Customer对象 更新Customer对象 加载Customer对象 删除Customer对象 检索Customer对象Hibernate的初始化的初始化 static try / 根据默认位置的Hibernate配置文件的配置信息,创建一个 /Configuration实例 Configuration config = new Configuration(); config.addClass(Customer.class); / 创建SessionFactory实例 */ sessionFactory = config.buildSessionFactory(); catch(Exception e)e.printStackTrace(); Hibernate的初始化的初始化 (1)创建一个Configuration类的实例,Configuration类的构造方法把默认文件路径下的hibernate.properties配置文件中的配置信息读入到内存: Configuration config = new Configuration();(2)调用Configuration类的addClass(Customer.class)方法: config.addClass(Customer.class); 该方法把默认文件路径下的Customer.hbm.xml文件中的映射信息读入到内存中。(3)调用Configuration类的buildSessionFactory()方法: sessionFactory = config.buildSessionFactory();SessionFactory接口接口 一个SessionFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例。SessionFactory有以下特点: 它是线程安全的,这意味着它的同一个实例可以被应用的多个线程共享。 它是重量级的,这意味着不能随意创建或销毁它的实例。如果应用只访问一个数据库,只需要创建一个SessionFactory实例,在应用初始化的时候创建该实例。如果应用同时访问多个数据库,则需要为每个数据库创建一个单独的SessionFactory实例。Session接口接口 Session接口是Hibernate应用使用最广泛的接口。 Session也被称为持久化管理器,它提供了和持久化相关的操作,如添加、更新、删除、加载和查询对象。 Session有以下特点: 不是线程安全的,因此在设计软件架构时,应该避免多个线程共享同一个Session实例。 Session实例是轻量级的,所谓轻量级是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建或销毁Session对象,例如为每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。Session接口操纵数据库的方法 Session接口提供了操纵数据库的各种方法,如: save()方法:把Java对象保存数据库中。 update()方法:更新数据库中的Java对象。 delete()方法:把Java对象从数据库中删除。 load()或get()方法:从数据库中加载Java对象。 find()方法:从数据库中查询Java对象。在 Hibernate3中,该方法已经被废弃。 Hibernate提供了专门的Query查询接口。用用Session来执行事务的流程来执行事务的流程 Session session = factory.openSession(); Transaction tx; try /开始一个事务 tx = session.beginTransaction(); /执行事务 . /提交事务 mit(); catch (Exception e) /如果出现异常,就撤销事务 if (tx!=null) tx.rollback(); throw e; finally /不管事务执行成功与否,最后都关闭Session session.close(); 正常执行数据库事务的流程正常执行数据库事务的流程 saveCustomer()方法该方法调用Session的save()方法,把Customer对象持久化到数据库中。 tx = session.beginTransaction(); session.save(customer); mit();当运行session.save()方法时,Hibernate执行以下SQL语句: 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)在test()方法中并没有设置Customer对象的id属性,Hibernate会根据映射文件的配置,采用increment标识符生成器自动以递增的方式为OID赋值。在Customer.hbm.xml文件中相关的映射代码如下: findAllCustomers()方法该方法通过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(); /提交事务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 ()方法该方法调用Session的get()方法,加载Customer对象,然后再修改Customer对象的属性。 tx = session.beginTransaction(); Customer c=(Customer)session.get(Customer.class,customer_id); c.setAddress(address); /修改内存中Customer对象的address属性 mit();以上代码先调用Session的get()方法,它按照参数指定的OID从数据库中检索出匹配的Customer对象,Hibernate会执行以下SQL语句: select * from CUSTOMERS where ID=1;loadAndUpdateCustomer()方法接着修改Customer对象的address属性。那么,Hibernate会不会同步更新数据库中相应的CUSTOMERS表的记录呢?答案是肯定的。Hibernate采用脏检查机制,按照内存中的Customer对象的状态的变化,来同步更新数据库中相关的数据,Hibernate会执行以下SQL语句: update CUSTOMERS set NAME=Tom,EMAIL=TADDRESS=Beijing where ID=1;尽管只有Customer对象的address属性发生了变化,但是Hibernate执行的update语句中会包含所有的字段。内存Session对象的缓存loadAndUpdateCustomer ()方法CUSTOMERS记录Customer对象加载同步更新当Customer对象位于Session对象的缓存中,当Customer对象的属性发生变化,Session对象会自动同步更新数据库。deleteCustomer()方法 该方法调用Session的delete()方法,删除特定的Customer对象: tx = session.beginTransaction(); session.delete(customer); mit(); 运行session.delete()方法时,Hibernate根据Customer对象的OID,执行以下SQL delete语句: delete from CUSTOMERS where ID=1;持久化对象的生命周期(lifecycle) Customer对象的状态转换过程 用用Session的的update()方法关联游离对象方法关联游离对象 Customer customer=new Customer();customer.setName(Tom);Session session1=sessionFactory.openSession();Transaction tx1 = session1.beginTransaction();session1.save(customer);mit();/此时此时Customer对象变为游离对象对象变为游离对象session1.close(); Session session2=sessionFactory.openSession();Transaction tx2 = session2.beginTransaction();/在和在和session2关联之前修改关联之前修改Customer对象的属性对象的属性customer.setName(Linda);session2.update(customer);/在和在和session2关联之后修改关联之后修改Customer对象的属性对象的属性customer.setName(Jack); mit();session2.close();Session的的update()方法方法Session的的update()方法完成以下操作:方法完成以下操作: (1)把)把Customer对象重新加入到对象重新加入到Session缓存中,使缓存中,使它变为持久化对象。它变为持久化对象。 (2)计划执行一个)计划执行一个update语句。值得注意的是,语句。值得注意的是,Session只有在清理缓存的时候才会执行只有在清理缓存的时候才会执行update语句,语句,并且在执行时才会把并且在执行时才会把Customer对象当前的属性值组装对象当前的属性值组装到到update语句中。因此,即使程序中多次修改了语句中。因此,即使程序中多次修改了Customer对象的属性,在清理缓存时只会执行一次对象的属性,在清理缓存时只会执行一次update语句。语句。

    注意事项

    本文(Hibernate组件框架.ppt)为本站会员(豆****)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开