Hibernate之Hibernate的体系结构
体系结构简图:

这是一张体系结构的简图,其中的hibernate.properties文件的作用相当于配置文件hibernate.cfg.xml
XML Mapping对应的就是映射文件 XXXX.hbm.xml
体系结构详图:

通过这张详图,可以看出Hibernate的持久化解决方案将用户从原始的JDBC访问中释放出来,用户无需关心底层的JDBC操作,以面向对象的方式进行持久层操作。底层数据库的连接,数据访问的实现,事务的控制都无需用户关心。这是一种“全面解决”的体系结构方案,通过配置文件和映射文件来管理JDBC连接和对象和关系之间的映射。下面对图中的对象进行解释:
SessionFactory类的对象:这是Hibernate的关键对象,它是单个数据库映射关系经过编译后在内存中的镜像,它是线程安全的。它是生成Session的工厂,本身需要依赖于ConnectionProvider。该对象可以在进程或集群的级别上,为那些事务之间可以重用的数据提供可选的二级缓存。
Session类的对象:它是应用程序与持久储存层之间交互操作的一个单线程对象。它也是Hibernate持久化操作的关键对象,所有的持久化对象必须通过Session类的对象
管理下才可以进行持久化操作。此对象生存期很短。它底层封装了JDBC连接,它也是Transaction类对象的工厂。Session类的对象持有一个必选的一级缓存,显示执行flush之前,所有持久化操作的数据都缓存在这个Session类的对象中。
Transaction类的对象:代表一次原子操作,它具有数据库事务的概念。
ConnectionProvider类的对象: 它是生成JDBC连接的工厂,它通过抽象将应用程序与底层的DataSource和DriverManager隔离开。这个对象无需程序直接访问。
TransactionFactory类的对象:它是生成Transaction类对象的工厂,该对象也无需程序直接访问。
Persistent Objects :持久化对象。系统创建的POJO的实例对象,一旦与特定的Session类的对象关联,并对应于数据库中的指定一条记录,该对象就处于持久化状态,这样的对象就称为持久化对象。此后对于持久化对象进行的修改,都将自动转化为对于持久层的修改。
瞬态对象:系统通过new关键字创建的POJO的实例对象,没有与Session类的对象相关联,此时这个对象称为瞬态对象。
托管对象:一个对象在经历过于与Session类的对象的关联之后,由于Session类的对象的关闭,此时这个对象称为托管对象。
所以一个POJO实例对象 ,经历三个状态:
瞬态状态(通过new出来,并未与Session类对象关联) → 持久化状态(与Session类对象进行了关联) → 托管状态 (Session类对象关闭,该对象沦为托管状态)
数据库连接的两种方式 DataSource与DriverManger
DriverManager 是一种默认的数据库连接方式。
DataSource 数据源是一种提高数据库连接性能的常规手段,数据源会负责维持一个数据连接池,当程序创建了该数据源实例时,系统会一次与要连接的数据库创建多个连接线程,并把这些数据库连接保存在连接池中。当程序需要进行数据库访问时,无需进行重新获得数据库连接,而是从连接池中取出一个空闲的数据库连接。当程序使用数据库连接访问数据库结束后,无需关闭数据库连接,而是将数据库连接归还给连接池即可。通过这种方式可以避免像DriverManager那样,频繁的获取数据库连接,关闭数据库连接所导致的性能下降。
Hibernate推荐使用DataSource方式来连接数据库,并且提供了C3P0数据源 的jar包。
Hibernate之Hibernate的体系结构的更多相关文章
- 问题Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not found解决方法
问题Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not fo ...
- Hibernate笔记——Hibernate介绍和初次环境配置
Hibernate简介 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate ...
- org.hibernate.HibernateException: /hibernate.cfg.xml not found等三个问题
初次配置hibernate在myeclipse上: 出现三个问题,怎么都不好使,比对代码,没有问题,查看路径还是没有问题: 1.org.hibernate.HibernateException: /h ...
- Hibernate之Hibernate环境搭建
Hibernate之Hibernate环境搭建 一.Hibernate环境搭建的步骤 1.添加Hibernate && SQLServer 的Jar antlr-2.7.7.jar d ...
- 【hibernate】Hibernate中save, saveOrUpdate, persist, merge, update 区别
Hibernate Save hibernate save()方法能够保存实体到数据库,正如方法名称save这个单词所表明的意思.我们能够在事务之外调用这个方法,这也是我不喜欢使用这个方法保存数据的原 ...
- 【hibernate】hibernate和mybatis的比较
理解和学习,使自己在做项目中更加得心应手. 第一方面:开发速度的对比就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉 ...
- 【Hibernate】Hibernate的多表查询
在<[Hibernate]Hibernate的聚类查询.分组查询.排序与时间之差>(点击打开链接)一文中已经讲述过怎样利用HQL语句代替SQL语句.进行聚类查询.分组查询.排序与时间之差的 ...
- Hibernate→ 《Hibernate程序开发》教材大纲
Hibernate ORM 概览 Hibernate 简介 Hibernate 架构 Hibernate 环境 Hibernate 配置 Hibernate 会话 Hibernate 持久化类 Hib ...
- hibernate配置文件hibernate.cfg.xml和.hbm.xml的详细解释
原文地址:http://blog.csdn.net/qiaqia609/article/details/9456489 hibernate.cfg.xml -标准的XML文件的起始行,version= ...
随机推荐
- (luogu P1383)高级打字机
高级打字机 题目链接 https://www.luogu.org/problemnew/show/P1383 背景 无聊中.. 随便在luogu上rand到了一道题 从此走上不归路 主席树是我暑假的时 ...
- 使用JSONP实现跨域
什么是跨域? 简单的来说,出于安全方面的考虑,页面中的JavaScript无法访问其他服务器上的数据,即"同源策略".而跨域就是通过某些手段来绕过同源策略限制,实现不同服务器之间通 ...
- 与JavaWeb有关的故事(web请求与Java I/O)
作为一名后端屌丝程序员,对算法.并发.性能乐此不疲.但是,随着年龄和阅历的增加,显然叶落而不知秋的心态是不太能混了.尤其是,某T面试官在明知我是后端,且明确表示对HTTP协议不太熟的情况下,强行让我解 ...
- OCR技术浅探:基于深度学习和语言模型的印刷文字OCR系统
作者: 苏剑林 系列博文: 科学空间 OCR技术浅探:1. 全文简述 OCR技术浅探:2. 背景与假设 OCR技术浅探:3. 特征提取(1) OCR技术浅探:3. 特征提取(2) OCR技术浅探:4. ...
- EOS 开发进展速报
Daniel Larimer 刚刚披露了 EOS 的最近开发进展,原文 :https://steemit.com/eos/@dan/ukoxz-eos-io-development-update 为了 ...
- 方法的重写与重载的区别(Override与Overload)。重载的方法是否可以改变返回值的类型
方法的重写(Override)与重载(Overload)的区别.重载的方法是否可以改变返回值的类型?[基础] 解释: 方法的重写overriding和重载Overloading是Java多态性的不同表 ...
- UML系列图
用例图: 时序图:
- Hashtable源码解析(JDK1.8)
package java.util; import java.io.*; import java.util.concurrent.ThreadLocalRandom; import java.util ...
- 简单使用git和github来管理代码----配置与使用
在以前没听说过github之前,自己写的代码很容易丢或者遗失,等到用时才知码到用时方恨丢,现在用了github,真的是替自己生省不少的事,闲话不多说,上教程. 1 在github上注册账号 https ...
- JVM学习一:JVM之类加载器概况
18年转眼就3月份都快结束了,也就是说一个季度就结束了:而我也因为年前笔记本坏了,今天刚修好了,那么也应该继续学习和博客之旅了.今年的博客之旅,从JVM开始学起,下面我们就言归正传,进入正题. 一.J ...