资源预览内容
第1页 / 共45页
第2页 / 共45页
第3页 / 共45页
第4页 / 共45页
第5页 / 共45页
第6页 / 共45页
第7页 / 共45页
第8页 / 共45页
第9页 / 共45页
第10页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Hibernate组件框架,目标,了解持久层概述 了解Hibernate的基本组件及接口 掌握基础语法 熟悉基础配置 了解基于hibernate的开发流程及简单应用 理解持久化对象的生命周期,Hibernate?,直接使用JDBC操作数据库的步骤很繁琐 JDBC操作的是关系型数据库 我们用JAVA开发程序,则使用面向对象的思想 Hibernate正是在这两种不同的模型之间建立关联,Hibernate给我们提供了利用面向对象的思想来操作关系型数据的接口,什么是关系模型(Relational Model)?,关系模型把世界看作是由实体(Entity)和联系(Relationship)构成的。 所谓实体就是指现实世界中具有区分与其它事物的特征或属性并与其它实体有联系的对象。在关系模型中实体通常是以表的形式来表现的。表的每一行描述实体的一个实例,表的每一列描述实体的一个特征或属性。 所谓联系就是指实体之间的关系,即实体之间的对应关系。 1:1 1:n m:n 关系数据库 表 字段 主键 外键,什么是面向对象?,面向对象三大特征:封装、继承(一般与特殊)、多态(覆盖与重载) 类 对象 属性 关系 一般与特殊关系(is a) 组成(has a) 关联及其多重性 1:1 1:n m:n 双向关联与单向关联,对象关系映射(Object Relational Mapping,简称ORM),ORM是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 Why ORM? 面向对象的开发方法是当今企业级应用开发环境中的主流开发方法 关系数据库是企业级应用环境中永久存放数据的主流数据存储系统 字母O起源于“对象”(Object),而R则来自于“关系”(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和呈现层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。 当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。而这些代码写起来总是重复的。,什么是Hibernate?,对象/关系映射一直都是数据库技术中的难点,尽管人们提出了许多方案解决这个问题,但都不能完全做到即便利又高效。EJB的推出让人们看到了希望,但实践证明实体Bean的效率并不高,并且还十分难于为初学者理解。由Gavin King创建的Hibernate框架,从某种程序上正在朝着正确的方向迈走,并且得到越来越多IT从业人员的认可。就像当年的Struts框架一样,Hibernate也已经在许多项目中得到广泛应用。Hibernate由于投注了更多的精力在提升效率上,使用起来又十分方便,新版的EJB规范正在向Hibernate方向靠拢。正是由于得到广泛的认可,Hibernate已经成为程序员必须掌握的技术之一。,Hibernate能做什么? - 理解O/R映射,Hibernate能帮助我们利用面向对象的思想,开发基于关系型数据库的应用程序 第一:将对象数据保存到数据库 第二:将数据库数据读入对象中 基于B/S的典型三层架构,关于分层 业务逻辑层和持久化层绝对不能依赖于展现层,持久化与持久层,什么是持久化? 将数据保存到物理的储存器(硬盘、磁带等)上的过程叫持久化。什么是持久层? 专门负责处理与物理数据相关操作(持久化数据,以供日后使用)的独立层次。“持久化”与“持久层”之间的关系? 持久化是动词,表示将内存中的数据存储到数据库或其他媒介。 持久层是名词,实现数据持久化的一个相对独立的领域(层),将数据使用者与数据实体相分离。,问题: 上图中哪些具有持久化过程?哪些具有持久层?,问题: 上图中哪些具有持久化过程?哪些具有持久层?,问题: 上图中哪些具有持久化过程?哪些具有持久层?,问题: 上图中哪些具有持久化过程?哪些具有持久层?,持久层与MVC,持久层解决了什么问题? 当发生以下三种情况的时候,数据持久化代码不需要重新编译 (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应用,教学目标 创建Hibernate的配置文件 创建持久化类 创建数据库Schema 创建对象-关系映射文件 映射文件的文档类型定义(DTD) 把Customer持久化类映射到CUSTOMERS表 通过Hibernate API操纵数据库,在Java应用中使用Hibernate的步骤,创建Hibernate的配置文件 创建持久化类 创建对象-关系映射文件 通过Hibernate API编写访问数据库的代码,Helloapp应用的结构,Hibernate的配置文件(hibernate.properties),hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.connection.driver_com.mysql.jdbc.Driver hibernate.connection.url=jdbc:mysql:/localhost:3306/SAMPLEDB hibernate.connection.username=root hibernate.connection.password=1234 hibernate.show_sql=true,Hibernate配置文件的属性,创建持久化类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类型:String,SQL类型:varchar,Hibernate类型:string,Java类型、Hibernate映射类型以及SQL类型之间的对应关系,Customer.hbm.xml配置的对象-关系映射,classesmypackCustomer.class classesmypackCustomer.hbm.xml,采用XML文件来配置对象-关系映射的优点,Hibernate既不会渗透到上层域模型中,也不会渗透到下层数据模型中。 软件开发人员可以独立设计域模型,不必强迫遵守任何规范。 数据库设计人员可以独立设计数据模型,不必强迫遵守任何规范。 对象-关系映射不依赖于任何程序代码,如果需要修改对象-关系映射,只需修改XML文件,不需要修改任何程序,提高了软件的灵活性,并且使维护更加方便。,通过Hibernate API操纵数据库,通过Hibernate API操纵数据库,创建BusinessService类,初始化Hibernate 通过Hibernate的Session接口操纵数据库: 保存Customer对象 更新Customer对象 加载Customer对象 删除Customer对象 检索Customer对象,Hibernate的初始化,statictry/ 根据默认位置的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实例。,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号