倚楼听风雨
淡看江湖路

JavaWeb中优秀的ORM(对象关系映射)框架Hibernate基础知识总结

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用 EJB 的J2EE 架构中取代CMP(Container Managed Persistence,容器管理的持久性,服务器负责处理数据库访问)完成数据持久化的重任。ORM框架,对象关系映射(Object Relation Mapping)。

Hibernate工具类:

xml与注解:

映射对象标识符(OID):
Hibernate使用对象标识符(OID)标识对象
Hibernate使用对象标识符标识对象示例图

Hibernate级联保存与更新:

在<many-to-one>这端,cascade 默认是"none",假如我们希望在持久化多的一端的时候,自动级联保存和更新一的一端,我们可以把cascade设置成"save-update";

Hibernate中inverse属性:

其实就是在级联关系当中可以实现权力控制的反转,转移。简单的示例:

一对多双向自身关联关系映射:

Hibernate中四种对象状态:
  • 临时状态(transient): 刚用new语句创建,还没有被持久化,并且不处 Sesssion的缓存中。处于临时状态的Java对象被称为临时对象。
  • 持久化状态(persistent): 已经被持久化,并且加入到Session的缓存中。处于持久化状态的Java对象被称为持久化对象。
  • 删除状态(removed): 不再处于Session的缓存中,并且Session已经计划将其从数据库中删除。处于删除状态的Java对象被称为删除对象。
  • 游离状态(detached):已经被持久化,但不再处于Session的缓存中。处于游离状态的Java对象被称为游离对象。

Hibernate持久化对象与临时对象示意图

Hibernate中四种对象状态示意图
Hibernate中对象的临时状态、持久化状态、游离状态、删除状态的关系示例图

session常用方法:
  1. save()方法: 将一个临时对象转变成持久化对象。
  2. update()方法: 将一个游离对象转变为持久化对象。
  3. saveOrUpdate()方法: 包含了save()和update()方法。
  4. merge()方法: 合并对象。
  5. delete()方法: 删除对象。

load()方法VSget()方法区别:

  • 都是根据 OID 从数据库中加载一个持久化对象。
  • 假如数据库中不存在与OID对应的记录,Load()方法会抛出异常,而get()方法返回null;
  • load()方法默认采用延迟加载策略(懒加载),get()方法采用立即检索策略(eager)。
Hibernate映射类型与Java类型以及标准SQL类型映射表格

Hibernate映射类型与Java类型以及标准SQL类型映射关联关系表

集合类型映射:
  1. Set无序,元素不可重复
  2. List有序,元素可重复
  3. Bag无序,元素可重复
  4. Map键值对
检索策略:
一、检索策略属性: Lazy
  • Lazy: true(默认) 延迟检索;set端一对多;
  • Lazy: false 立即检索;set 端 一对多;
  • Lazy: extra 增强延迟检索;set端一对多;
  • Lazy: proxy(默认) 延迟检索;many-to-one多对一;
  • Lazy:no-proxy 无代理延迟检索;many-to-one多对一(需要编译时字节码增强);

二、检索策略属性: batch-size

  • 批量延迟检索;
  • 批量立即检索;

三、检索策略属性: Fetch

  • Fetch: select(默认)查询方式
  • Fetch: subselect子查询方式
  • Fetch: join迫切左外连接查询方式
Hibernate查询方式:
  1. 导航对象图查询方式(级联)
  2. OID查询方式(get()方法和load()方法)
  3. 本地SQL查询方式 (数据库的语法)
  4. HQL查询方式(面向对象)

    HQL(Hibernate Query Language)是面向对象的查询语言,是使用最广的一种查询方式。
    普通查询
    带条件查询
    使用别名
    对结果排序
    分页查询
    查询单个对象
    链式写法

  5. QBC查询方式(Query By Criteria)

    QBC查询方式(Query By Criteria)是用一套接口来实现的查询方式。
    普通查询
    带条件查询
    对结果排序
    分页查询
    查询单个对象
    链式写法

配置Hibernate缓存:

一、缓存的概念:

缓存是介于物理数据源与应用程序之间,是对数据库中的数据复制一份临时放在内存或者硬盘中的容器,其作用是为了减少应用程序对物理数据源访问的次数,从而提高了应用程序的运行性能。Hibernate在进行读取数据的时候根据缓存机制在相应的缓存中查询如果在缓存中找到了需要的数据(我们把这称做"缓存命中"),则就直接把命中的数据作为结果加以利用,避免了大量发送SQL语句到数据库查询的性能损耗。

二、Hibernate缓存的分类:

  • Session缓存(又称作事务缓存): Hibernate内置的,不能卸除。 缓存只能被当前Session对象访问。缓存的生命周期依赖于Session的生命周期,当Session被关闭后,缓存也就结束生命周期。一级缓存只适用于同一事物中。
  • SessionFactory缓存(又称作应用缓存):使用第三方插件,可插拔。缓存被应用范围内的所有session共享,不同的Session可以共享。这些session有可能是并发访问缓存,因此必须对缓存进行更新。缓存的生命周期依赖于应用的生命周期,应用结束时,缓存也就结束了生命周期,二级缓存存在于应用程序范围。
三、二级缓存策略提供商:
提供了HashTable缓存,EHCacheOSCacheSwarmCachejBoss Cathe2,这些缓存机制,其中EHCache、OSCache 是不能用于集群环境(Cluster Safe)的,而 SwarmCache,jBoss Cathe2 是可以的。
HashTable缓存主要是用来测试的,只能把对象放在内存中,EHCache、OSCache可以把对象放在内存(memory)中,也可以把对象放在硬盘(disk)(为什么放到硬盘上?上面解释了)。
四、什么数据适合放二级缓存中?
  • 经常被访问
  • 改动不大
  • 数量有限
  • 不是很重要的数据,允许出现偶尔并发的数据。比如组织机构代码,列表信息等。
五、配置EHCache二级缓存:

更博不易,如果觉得文章对你有帮助并且有能力的老铁烦请赞助盒烟钱,点我去赞助。或者扫描文章下面的微信/支付宝二维码打赏任意金额,老四这里抱拳了。赞助时请备注姓名或者昵称,因为您的署名会出现在赞赏列表页面,您的赞赏钱财也会被用于小站的服务器运维上面,再次抱拳。

赞(18) 给你买杜蕾斯
本站原创文章受自媒体平台原创保护,未经允许不得转载高老四博客 » JavaWeb中优秀的ORM(对象关系映射)框架Hibernate基础知识总结
分享到: 更多 (0)

开始你的表演 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下老四,鼓励我更好的创作

支付宝扫一扫打赏

微信扫一扫打赏