1 / 288

Hibernate

Hibernate. 讲师 : 冯威. Hibernate 入门. Hibernate 入门. 案例. Customer 类. Customer Service 类. Hibernate. Hibernate API. 对象关系型映射. Hibernate 配置文件. 关系数据库. customers 表. Hibernate 入门. 1 创建应用工程. 引入相关的 jar 包 * hibernate 的相关 jar 包 hibernate-distribution-3.5.6-Finallibequired*.jar

kassia
Download Presentation

Hibernate

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Hibernate 讲师: 冯威 北京传智播客教育 www.itcast.cn

  2. Hibernate入门 北京传智播客教育 www.itcast.cn

  3. Hibernate入门 • 案例 Customer类 CustomerService类 Hibernate Hibernate API 对象关系型映射 Hibernate配置文件 关系数据库 customers表 北京传智播客教育 www.itcast.cn

  4. Hibernate入门 1 创建应用工程 引入相关的jar包 * hibernate的相关jar包 hibernate-distribution-3.5.6-Final\lib\required\*.jar hibernate-distribution-3.5.6-Final\hibernate3.jar hibernate-annotations-3.4.0.GA\lib\test\slf4j-log4j12.jar hibernate-annotations-3.4.0.GA\lib\test\log4j.jar * junit测试的jar包 junit-4.8.2.jar * mysql的驱动jar包 mysql-connector-java-5.1.10-bin.jar 北京传智播客教育 www.itcast.cn

  5. Hibernate入门 一个语言转换工具,Hibernate利用它实现 HQL 到 SQL 的转换 collections Apache 的工具集,用来增强Java对集合的处理能力 dom4j XML 解析器 代码生成工具, Hibernate用它在运行时扩展 Java类 标准的 JAVA 事务处理接口 hibernate使用的一个日志系统 核心包 北京传智播客教育 www.itcast.cn

  6. Hibernate入门 2 创建表和对应的javaBean文件(持久化类) create table customer ( id int primary key, name varchar(12), age int, des text ) publicclass Customer { private Integer id; private String name; private Integer age; private String des; } 北京传智播客教育 www.itcast.cn

  7. Hibernate入门 3 创建对象-关系映射文件 • Hibernate 采用 XML 格式的文件来指定对象和关系数据之间的映射. 在运行时 Hibernate 将根据这个映射文件来生成各种 SQL 语句 • 映射文件的扩展名为 .hbm.xml 这里Customer.hbm.xml文件 指定类和表的映射 指定持久化类的OID 和表的主键的映射 指定对象标识符生成器, 负责为 OID 生成唯一标识符 映射类的属性和表的字段 property元素:设定持久化类的属性和表字段映射 name属性:指定持久化类的属性的名字 column属性:指定表中字段的名称 type属性指定Hibernate映射类型 Hibernate映射类型是java类型与SQL类型的桥梁 注:该映射文件的规范在org.hibernate. hibernate-mapping-3.0.dtd文件中 北京传智播客教育 www.itcast.cn

  8. Hibernate入门 4. 创建 Hibernate 配置文件, Hibernate 从其配置文件中读取和数据库连接的有关信息, 这个文件应该位于应用的 classpath 下. 注:该映射文件的规范在org.hibernate.hibernate-configuration-3.0.dtd文件中 指定连接数据库的基本属性信息 指定数据库所使用的 SQL 方言 指定程序运行时是否在数据库自动生成数据表 指定程序运行时是否在控制台输出 SQL 语句 指定程序需要关联的映射文件 北京传智播客教育 www.itcast.cn

  9. Hibernate入门 5.加载xml文件,创建sessionFactory 北京传智播客教育 www.itcast.cn

  10. Hibernate入门 6.保存客户的信息 北京传智播客教育 www.itcast.cn

  11. Hibernate入门 7. 更新客户信息 北京传智播客教育 www.itcast.cn

  12. Hibernate入门 8.通过id删除客户信息 北京传智播客教育 www.itcast.cn

  13. Hibernate入门 9.通过id查询客户信息 北京传智播客教育 www.itcast.cn

  14. Hibernate入门 10. 查询所有的客户信息 北京传智播客教育 www.itcast.cn

  15. Hibernate入门 • java、hibernate、sql类型对应关系 英语(hibernate) 日语(sql) 汉语(java) 北京传智播客教育 www.itcast.cn

  16. Hibernate入门 北京传智播客教育 www.itcast.cn

  17. Hibernate API简介 - Configuration 类 • Configuration 类负责管理 Hibernate 的配置信息。包括如下内容: • Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等(对应 hibernate.cfg.xml文件)。 • 持久化类与数据表的映射关系(*.hbm.xml文件) • 创建 Configuration 的两种方式 • 属性文件(hibernate.properties): Configuration cfg = new Configuration(); • Xml文件(hibernate.cfg.xml) Configuration cfg = new Configuration().configure(); 北京传智播客教育 www.itcast.cn

  18. Hibernate API简介 -SessionFactory接口 • Configuration对象根据当前的配置信息生成 SessionFactory 对象。SessionFactory 对象一旦构造完毕,即被赋予特定的配置信息(SessionFactory 对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存)。 Configuration cfg = new Configuration().configure(); SessionFactory sf = cfg.buildSessionFactory(); • 是线程安全的。 • SessionFactory是生成Session的工厂: Session session = sf.openSession(); • 构造 SessionFactory 很消耗资源,一般情况下一个应用中只初始化一个 SessionFactory 对象。 北京传智播客教育 www.itcast.cn

  19. Hibernate API简介 -session接口 • Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心,所有持久化对象必须在 session 的管理下才可以进行持久化操作。此对象的生命周期很短。Session 对象有一个一级缓存,显式执行 flush 之前,所有的持久层操作的数据都缓存在 session 对象处。相当于 JDBC 中的 Connection。 • 持久化类与 Session 关联起来后就具有了持久化的能力。 • 是线程不安全的 • Session 类的方法: • 取得持久化对象的方法: get() load() • 持久化对象都得保存,更新和删除:save(),update(),saveOrUpdate(),delete() • 开启事务: beginTransaction(). • 管理 Session 的方法:isOpen(),flush(), clear(), evict(), close()等 北京传智播客教育 www.itcast.cn

  20. Hibernate API简介 -Transaction接口 • 代表一次原子操作,它具有数据库事务的概念。所有持久层都应该在事务管理下进行,即使是只读操作。 Transaction tx = session.beginTransaction(); • 常用方法: • commit():提交相关联的session实例 • rollback():撤销事务操作 • wasCommitted():检查事务是否提交 北京传智播客教育 www.itcast.cn

  21. Hibernate运行过程 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对象将提交这些操作到数据库中。 北京传智播客教育 www.itcast.cn

  22. Hibernate运行过程 应用程序 配置文件 hibernate.cfg.xml Configuration SessionFactory 映射文件 .hbm.xml Session 查询 Query Transaction 正常 异常 提交 回滚 数据库 北京传智播客教育 www.itcast.cn

  23. 第一章Java对象持久化概述 北京传智播客教育 www.itcast.cn

  24. Java对象持久化概述 Hibernate是什么 面向java环境的对象/关系数据库映射工具。 1.开源的持久层框架. 2.ORM(Object/Relational Mapping)映射工具,建立面向对象的域模型和关系数据模型之间的映射. 3.连接java应用和数据库的中间件. 4.对JDBC进行封装,负责java对象的持久化. 5.在分层结构中处于持久化层,封装对数据库的访问细节, 使业务逻辑层更专注于实现业务逻辑 北京传智播客教育 www.itcast.cn

  25. Java对象持久化概述 为什么要用Hibernate 1、Hibernate对JDBC访问数据库的代码做了封装,大大简化 了数据访问层繁琐的重复性代码。 2、Hibernate是一个基于jdbc的主流持久化框架,是一个优秀 的orm实现,它很大程度的简化了dao层编码工作。 3、Hibernate使用java的反射机制,而不是字节码增强程序类实现 透明性 4、Hibernate的性能非常好,因为它是一个轻量级框架。映射的灵 活性很出色。它支持很多关系型数据库,从一对一到多对多的各 种复杂关系。 北京传智播客教育 www.itcast.cn

  26. Java对象持久化概述 • Java 应用的持久化分层 为了把数据访问细节和业务逻辑分开, 可以把数据访问作为单独的持久化层 表述层 表述层 业务逻辑层 业务逻辑层 持久化层 数据库层 数据库层 北京传智播客教育 www.itcast.cn

  27. Java对象持久化概述 • Hibernate中间件:Hibernate不和特定的业务领域相关,能够把任意一个Java应用与数据库系统连接,可以理解为是一种中间件。 应用2 应用1 应用3 业务逻辑层 业务逻辑层 业务逻辑层 持久化层 (hibernate) 数据库1 数据库2 数据库3 持久化层封装了数据访问的细节,为业务逻辑层提供了面向对象的API。完善的持久化层应该 达到的目标: 1.代码重用性高,可完成所有的数据访问操作。 2.如果需要的话,能够支持多种数据库平台。 3.具有相对独立性,当持久化层变化时,不会影响上层实现。 北京传智播客教育 www.itcast.cn

  28. Java对象持久化概述 • 软件模型 • 概念模型:模拟问题域中的真实实体。描述每个实体的概念和属性及实体间关系。不描述实体行为。实体间的关系有一对一、一对多和多对多。 客户 Name age 订单 orderNumber price 1 * 北京传智播客教育 www.itcast.cn

  29. Java对象持久化概述 • 软件模型 • 关系数据模型:在概念模型的基础上建立起来的,用于描述这些关系数据的静态结构。有以下内容组成: 1.若干表 2.表的所有索引 3.视图 4.触发器 5.表与表之间的参照完整性 Customers表 ID<PK> NAME AGE ORDERS表 ID<pk> CustomerID<fk> Order_number price 北京传智播客教育 www.itcast.cn

  30. Java对象持久化概述 • 软件模型 • 域模型:在软件的分析阶段创建概念模型,在软件设计阶段创建域模型。 组成部分: 1.具有状态和行为的域对象。 2.域对象之间的关联。 北京传智播客教育 www.itcast.cn

  31. Java对象持久化概述 • 软件模型 • 域对象(domain object):构成域模型的基本元素就是域对象。对真实世界的实体的软件抽象,也叫做业务对象(Business Object(BO)).域对象可代表业务领域中的人、地点、事物或概念。 域对象分为以下几种: 实体域对象:通常是指业务领域中的名词。(pojo) (plain old java object)。--映射数据库中的表 过程域对象:应用中的业务逻辑或流程。依赖 于实体域对象,业务领域中的动词。如 发出订单、登陆等。(对pojo操作的方法) 事件域对象:应用中的一些事件(警告、异常)。 北京传智播客教育 www.itcast.cn

  32. Java对象持久化概述 • 软件模型 • 域对象间的关系 1.关联:类间的引用关系。以属性定义的方式表现。 Order Customer 关联可分为一对一、一对多和多对多。还可分为单项关联和双向关联。 北京传智播客教育 www.itcast.cn

  33. Java对象持久化概述 • 软件模型 • 域对象间的关系 依赖:类之间访问关系。无需定义成属性。在A中访问B中的 方法或属性,或者A负责实例化B。 BusinessService Customer 北京传智播客教育 www.itcast.cn

  34. Java对象持久化概述 • 软件模型 • 域对象间的关系 3.聚集(Aggregation):整体与部分的关系。例人与手的关系。部分类的对象不能单独存在,他的生命周期依赖于整体类的对象的生命周期,整体消失时,部分也随之消失。 Person hand:set Hand …… 北京传智播客教育 www.itcast.cn

  35. Java对象持久化概述 • 软件模型 • 域对象间的关系 4.一般化(Generalization):类之间继承关系。 Employee name SalaryEmployee salary HourEmployee rate 北京传智播客教育 www.itcast.cn

  36. Java对象持久化概述 • 软件模型 • 域对象的持久化概念 实体域对象在内存中创建后,不能永久存在。将实体域对象永久保存起来,就是持久化的过程。通常只有实体域对象需要持久化,过程域对象和事件域对象一般不需要持久化。广义持久化指增、删、改、查。 内存 持久化 数据库 Customer对象 order对象 重新加载到内存 北京传智播客教育 www.itcast.cn

  37. Java对象持久化概述 • ORM:(Object/Relation Mapping): 对象/关系映射 • 主要解决对象-关系的映射 • ORM的实现思想:将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作。因此ORM的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。 • ORM 采用元数据来描述对象-关系映射细节, 元数据通常采用 XML 格式, 并且存放在专门的对象-关系映射文件中 customers 北京传智播客教育 www.itcast.cn

  38. Java对象持久化概述 ORM:(Object/Relation Mapping): 对象/关系映射 域模型 (对象、属性、关联、继承和多态) 业务逻辑层 对象-关系映射文件 (xml) ORM API ORM 实现 参照 持久化层 关系数据模型 (表、字段、索引、主键和外键) 数据库层 ORM 充当业务逻辑层和数据库层之间的桥梁 北京传智播客教育 www.itcast.cn

  39. Java对象持久化概述 ORM:(Object/Relation Mapping): 对象/关系映射 • ORM中间件的使用方法 采用元数据来描述对象-关系映射细节,元数据通常采用xml格式,并存放在专门的对象-关系映射文件中。只要配置了持久化类与表的映射关系,orm中间件在运行时就能够参照映射文件的信息,把域对象持久化到数据库中。 public void deleteCustomer(Customer c){ Session session = getSession(); session.save(c); } 执行步骤如下: 1.运用反射机制,获得Customer对象的Customer.class类。 2.参照映射文件得到Customer类对应的表的信息,以及和Customer类关联的类以及 相应的表信息。 3.根据以上信息生成SQL语句。 4.调用hibernate API,执行该语句。 北京传智播客教育 www.itcast.cn

  40. 第二章 对象-关系映射基础 北京传智播客教育 www.itcast.cn

  41. 持久化类的属性及访问方法 知识点1:Hibernate中持久化类的访问者有两个(从保存和查询两条路线看) Java应用程序不能访问持久化类的private方法,而hibernate没有这 个限制,它可以访问各种级别的方法。 北京传智播客教育 www.itcast.cn

  42. 持久化类的属性及访问方法 知识点2:基本数据类型和包装类型区别: 基本数据类型和包装类型对应的hibernate映射类型相同。 <property name=“price” type=“double” column=“PRICE” /> 基本类型可直接运算、无法表达null、数字类型的默认值为0。 包装类默认值是null。当对于默认值有业务意义的时候需要使用包装类。 例如:Student类有一个int类型的scope属性,表示学生的考试分数.int类型的scope属性无法表达这样的业务需求: * 如果scope的属性为null,表示该学生的成绩是未知的,有可能得了100分,也有可能得了0分,只是暂时还不知道成绩 * 如果scope属性为0,表示学生考试成绩为0分. * 在上面的情况中必须使用包装类型 北京传智播客教育 www.itcast.cn

  43. 持久化类的属性及访问方法 知识点3:Hibernate访问持久化类属性的策略 1.propertye 默认值:表明hibernate通过getXXX和 setXXX来访问类属性。推荐使用。提高域模型透明性。 2.field:hibernate通过java反射机制直接访问类属性。对于没有 javabean方法的属性可设置该访问策略。 3 noop:它映射Java持久化类中不存在的属性,即主要用于HQL(用query接口测试,使用hql语句)中,当数据库中有某列,而实体中不存在的情况。(不需要了解) <!-- 该属性在Customer类中不存在get和set方法 --> <property name="name" column="name" type="string" access="field" /> <!-- 该属性在Customer类中不存在,但在数据库存在该字段 使用noop处理 查询的时候忽略该字段--> <property name="name" column="name" type="string" access="noop"/> 北京传智播客教育 www.itcast.cn

  44. 持久化类的属性及访问方法 知识点4:在持久化类的方法中加入程序逻辑 在Customer.hbm.xml文件中无需映射firstname和lastname属 性,而是映射name属性。 尽管类中并没有name属性,由于hibernate不是直接访问Name属性,而是调用 get、set方法,因此建立了Firstname、Lastname和表之间的联系。 北京传智播客教育 www.itcast.cn

  45. 持久化类的属性及访问方法 知识点5:设置派生属性 利用<property>元素的formula属性,用来设置一个sql表达式,hibernate将根据它来计算出派生属性的值。 在customer类中增加两个属性 * private Double price; * private Double totalprice;//在数据库中没有对应的列 在Customer.hbm.xml文件中增加如下配置 <property name="price" column="price" type="double"/> <property name="totalprice" formula="(select sum(o.price) from customer o)"/> 注意:在sql语句中使用别名,派生属性中使用的是sql语句 北京传智播客教育 www.itcast.cn

  46. 持久化类的属性及访问方法 知识点6:控制insert、update语句 北京传智播客教育 www.itcast.cn

  47. 处理sql引用表示符 在SQL语法中,表示符是指用于为数据库表、视图、字段或索引等名字的字符串,常规表示符不包括空格,也不包含特殊字符,因此无需使用引用符号。如果数据库表名或列名包含特殊字符,可以使用引用表示符(键盘~下面的字符)。 知识点7:处理sql引用表示符 类中增加 private String des; 映射文件增加 <property name="des" column="`customer des`“ type="text"/> 北京传智播客教育 www.itcast.cn

  48. 对象-关系映射基础 知识点8:设置类的包名 如果在一个映射文件中包含多个类,并且这些类位于同一个包中,可以设置<hibernate-mapping>元素的package属性,避免为每个类提供完整的类名。 北京传智播客教育 www.itcast.cn

  49. 第三章 映射对象标识符 北京传智播客教育 www.itcast.cn

  50. 映射对象标识符 知识点1:唯一性的标志 * Java按地址区分同一个类的不同对象. * 关系数据库用主键区分同一条记录. * Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系。对象的OID和数据库的表的主键对应。为保证OID的唯一性,应该让Hibernate来为OID付值。 北京传智播客教育 www.itcast.cn

More Related