Hibernate总结_第1页
Hibernate总结_第2页
Hibernate总结_第3页
Hibernate总结_第4页
Hibernate总结_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 Hibernate 总结总结 HIBERNATE 总结总结 1 一 一 HIBERNATE 框架及框架及 ORM 1 1 1 HIBERNATE的定义 1 1 2 ORM 的定义 2 1 3 HIBERNATE框架的优点 2 1 4 HIBERNATE 框架的缺点 2 1 5 HIBERNATE 中 JAVA 对象的三种状态 2 2 3 三种状态转换的详解 3 二 二 HQL 实用技术实用技术 4 2 1 编写 HQL 语句 4 2 2 执行 HQL 语句 4 2 3 在 HQL 查询语句中绑定参数 5 三 三 HIBERNATE 关联映射关联映射 6 3 1 多对一映射关联 MANY TO ONE 6 3 2 一对多映射关联 ONE TO MANY 6 3 3 一对一映射关联 6 3 4 多对多关联 MANY TO MANY 7 四 四 HIBERNATE 缓存机制缓存机制 8 2 4 1 缓存的概念 8 4 2 HIBERNATE缓存分类 8 4 3 一级缓存详解 9 4 4 二级缓存详解 9 一 一 Hibernate 框架及框架及 ORM 1 1 Hibernate 的定义的定义 Hibernate 是数据持久化工具 是一个开放源代码的对象关系映射框架 Hibernate 内部封装了通过 JDBC 访问数据库的操作 向上层应用提供面向对象 的数据访问 API 1 2 ORM 的定义 的定义 ORM 全称 Object Relation Mapping 即对象关系映射 是一种数据持久化技 术 它在对象模型和关系型数据库之间建立起对应关系 并且提供了一种机制 通过 JavaBean 对象去操作数据库表中的数据 此图暂时省略 1 3 Hibernate 框架的优点 框架的优点 Hibernate 功能强大 是 Java 应用与关系数据库之间的桥梁 较之 JDBC 操 作数据库 代码量大大减少 提高了持久化代码的开发速度 降低了维护 成本 Hibernate 支持许多面向对象的特性 如组合 继承 使得开发人员不必在 面向业务领域的对象模型和面向数据库的关系型数据模型之间来回切换 方便开发人员进行领域驱动的面向对象的设计与开发 可移植性好 系统不会绑定在某个特定的关系型数据库上 对于系统更换 数据库 通常需要修改 Hibernate 配置文件即可正常运行 Hibernate 框架开源免费 可以在需要时研究源代码 改写源代码 进行功 3 能的定制 具有可扩展性 Hibernate 适用于中大型项目 1 4 Hibernate 框架的缺点 框架的缺点 不适合以数据为中心 大量适用存储过程的应用 大规模的批量插入 修改 删除不适合用 Hibernate Hibernate 不适用于小型项目 也不适用于关系模型设计不合理 不规范的 系统 1 5 Hibernate 中中 Java 对象的三种状态对象的三种状态 Hibernate 框架通过 Session 来管理 Java 对象的状态 在持久化生命周期中 Java 对象存在这以下三种状态 1 瞬时状态 Transient 通过 new 创建对象后 对象并没有立刻持久化 它并未与数据库中的 数据有任何的关联 此时 Java 的状态为瞬时状态 Session 对于瞬时状态的 Java 对象是一无所知的 当对象不再被其它对象引用时 它的所有数据也 就丢失了 对象会被 Java 虚拟机按照垃圾回收机制处理 2 持久状态 Persistent 当对象与 Session 关联 被 Session 管理时 它就处于持久状态 处于 持久状态的对象拥有数据库标识 与 Session 发生关联的两种方式为 第一 通过 Session 的查询接口 比如 get 方法或 load 方法 第二 针对于瞬时状 态的对象 通过 Session 的 save 方法或 update 方法 即 Java 对象和 Session 发生了关联 3 游离状态 Detached 处于持久状态的对象 脱离与其关联的 Session 管理后 对象就处于 游离状态 处于游离状态的对象 Hibernate 无法保证对象所包含的数据与 数据库中的数据一致 因为 Hibernate 已经无法感知对该对象的任何操作 Session 提供了两个方法 update merge 将处于游离状态的对象与一个 新的 Session 对象发生关联 此时 对象的状态就从游离状态转换为持久状 态 2 2 三种状态之间的转换三种状态之间的转换 如下图 4 表示开始 表示结束 2 3 三种状态转换的详解三种状态转换的详解 1 瞬时状态转为持久状态 使用 Session 对象的 save 或 saveOrUpdate 方法保存对象后 该对 象的状态由瞬时状态转换为持久状态 使用 Session 对象的 get 或 Load 方法获取对象 该对象的状态为持 久状态 2 持久状态转为瞬时状态 执行 Session 对象的 delete 方法后 对象由原来的持久状态变为瞬 时状态 因为此时该对象没有与任何的数据库数据关联 3 持久状态转为游离状态 执行了 Session 对象的 evict clear 或 close 方法 对象由原来的 持久状态转换为游离状态 4 游离状态转为持久状态 重新获取 Session 对象 执行 Session 对象的 update 或 saveOrUpdate 方法 该对象由游离状态转换为持久状态 该对象再次 与 Session 对象关联 5 游离状态转为瞬时状态 执行 Session 对象的 delete 方法 对象由游离状态转为瞬时状态 处于瞬时状态或游离状态的对象不再被其它对象引用时 会被 Java 虚拟机按照垃圾回收机制处理 5 二 二 HQL 实用技术实用技术 Hibernate 支持三种查询方式 HQL Hibernate Query Language 即 Hibernate 查询语言 Criteria 查询和原生 SQL Native SQL 查询 2 1 编写编写 HQL 语句语句 2 1 1 from 子句 使用方法 from 全限定类名 2 1 2 select 子句 使用方法 select 属性名 from 全限定名 as 全限定名的别名 2 1 3 where 子句 Where 子句用于表达查询的限制条件 使用方法 加在 from 子句 后面 2 1 4 使用函数表达式 举例说明 lower 函数和 upper 函数 2 1 5 order by 子句 用于按照指定的属性排序 例如按照员工的薪水排序 From emp order by salary desc 2 2 执行执行 HQL 语句语句 步骤 首先编写好 HQL 语句 然后构建 Query 对象 最后执行 Query 对 象的 list 方法或者是 iterator 方法 以下是查询所有员工姓名的示例代码 构建HQL语句 String hql from Emp 构建Query对象 Query query session createQuery hql 执行查询语句 List empList query list for Emp emp empList System out println 员工姓名 emp getEmpName 2 3 在在 HQL 查询语句中绑定参数查询语句中绑定参数 2 3 1 HQl 的参数绑定有以下两种形式 按参数位置绑定 在 HQl 语句查询语句中 用 占位符来定义 参数的位置 例如 Query query session createQuery from Emp where 6 job And sal query setString 0 job query setDouble 1 sal 按照参数名称绑定 在 HQL 语句中定义命名参数 命名参数以 开头 例如 Query query session createQuery from Emp where job empJob query setString empJob clerk 2 4 绑定各种类型的参数绑定各种类型的参数 较简单 不再举例说明 setParameter 方法 绑定任意类型的参数 setProperties 方法 绑定命名参数与一个对象的属性值 2 5 Query 对象的两种查询方法对象的两种查询方法 query list 获取一个集合列表 query uniqueResult 获取唯一的结果 注意 当查询结果不唯一时 如果调用 query uniqueResult 方法时 会报错如 下错误 org hibernate NonUniqueResultException query did not return a unique result 2 6 实现数据的分页查询实现数据的分页查询 Hibernate 实现分页的方法是通过 setFirstResults int firstResult 和 setMaxResults int maxResults 方法实现 其中 setFirstResults 用于设置第一 条记录的位置 setMaxResults 用于设置最大返回的记录条数 具体步骤如下 1 使用聚合函数 count 放获得记录总数 count 2 计算总页数 int totalPage count pagesize 0 count pagesize count pagesize 1 其中 pagesize 是每页显示的记录数 3 实现分页 query setFirstRsult pageIndex 1 pagesize query setMaxResults pagesize List list query list 得到分页查询结果 其中 pageIndex 是当前页码 7 三 三 Hibernate 关联映射关联映射 Hibernate 关联映射主要有以下几种 多对一 many to one 一对多 one to many 一对一 one to one 多对多 many to many 3 1 多对一映射关联 多对一映射关联 many to one 适用场合 比如多个员工在同一部门上班 那么 多 就指多个员工 一 就 指这个部门 再比如 50 名学生在一个班级里 多 指的是 50 名学生 一 就指这个班级 3 2 一对多映射关联 一对多映射关联 one to many 其意义刚好和多对一映射关联相反 3 3 一对一映射关联一对一映射关联 一对一映射关联主要是主键关联映射 主键关联映射 即让两个对象具有相同的主键值 以表明它们之间一一对 应的关系 数据库表不会有额外的字段来维护它们之间的关系 仅通过表 的主键来关联 单向主键关联 例如 人 身份证号 双向主键关联 例如 人 身份证号 8 唯一外键关联 外键关联 本来是用于多对一的配置 但是通过加上唯一 的限制之后 也可以用来表示一对一关联关系 单向唯一外键关联 例如 人 身份证号 单向唯一外键关联 例如 人 身份证号 3 4 多对多关联 多对多关联 many to many 一般的设计中 多对多关联映射 需要一个中间表 Hibernate 会自动生成中间表 Hibernate 使用 many to many 标签来表示多对多的关联 多对多的关联映射 在实体类中 跟一对多一样 也是用集合来表示的 例如 用户与他的角色 一个用户拥有多个角色 一个角色还可以属于多个用户 看如下对象模型图 再看如下关系模型图 9 四 四 Hibernate 缓存机制缓存机制 4 1 缓存的概念 缓存的概念 缓存是介于应用程序和物理数据源之间 其作用是为了降低应用程序对物 理数据源访问的频次 从而提高了应用的运行性能 缓存内的数据是对物理数 据源中的数据的复制 应用程序在运行时从缓存读写数据 在特定的时刻或事 件会同步缓存和物理数据源的数据 4 2 Hibernate 缓存分类 缓存分类 第一级是 Session 的缓存 由于 Session 对象的生命周期通常对应一个数据 库事务或者一个应用事务 因此它的缓存是事务范围的缓存 第一级缓存 是必需的 不允许而且事实上也无法卸除 在第一级缓存中 持久化类的 每个实例都具有唯一的 OID 第二级缓存是一个可插拔的的缓存插件 它是由 SessionFactory 负责管理 由于 SessionFactory 对象的生命周期和应用程序的整个过程对应 因此第二 级缓存是进程范围或者集群范围的缓存 这个缓存中存放的对象的松散数 据 第二级对象有可能出现并发问题 因此需要采用适当的并发访问策略 该策略为被缓存的数据提供了事务隔离级别 缓存适配器用于把具体的缓 存实现软件与 Hibernate 集成 第二级缓存是可选的 可以在每个类或每个 集合的粒度上配置第二级缓存 4 3 一级缓存详解一级缓存详解 加入一级缓存的数据操作方法有 session save 方法 session update 方法 session saveOrUpdate 方法 session load 或 get 方法 Query 接口的 list 和 iterator 方法 10 Session 缓存的特点 1 减少访问数据库的次数 提高数据访问的性能 2 保证数据库中的相关记录与缓存中的相应对象同步 管理 Session 缓存的三种方法 1 evict Object obj 方法 从缓存中清除指定的持久化对象 2 clear 清空 Session 中的所有持久化对象 3 flush 强制进行从缓存到数据库的同步 4 4 二级缓存详解二级缓存详解 配置二级缓存的步骤 配置二级缓存的步骤 1 选择合适的缓存插件 配

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论