体系结构简图:

这是一张体系结构的简图,其中的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的体系结构的更多相关文章

  1. 问题Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not found解决方法

    问题Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not fo ...

  2. Hibernate笔记——Hibernate介绍和初次环境配置

    Hibernate简介 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate ...

  3. org.hibernate.HibernateException: /hibernate.cfg.xml not found等三个问题

    初次配置hibernate在myeclipse上: 出现三个问题,怎么都不好使,比对代码,没有问题,查看路径还是没有问题: 1.org.hibernate.HibernateException: /h ...

  4. Hibernate之Hibernate环境搭建

    Hibernate之Hibernate环境搭建 一.Hibernate环境搭建的步骤 1.添加Hibernate && SQLServer 的Jar antlr-2.7.7.jar d ...

  5. 【hibernate】Hibernate中save, saveOrUpdate, persist, merge, update 区别

    Hibernate Save hibernate save()方法能够保存实体到数据库,正如方法名称save这个单词所表明的意思.我们能够在事务之外调用这个方法,这也是我不喜欢使用这个方法保存数据的原 ...

  6. 【hibernate】hibernate和mybatis的比较

    理解和学习,使自己在做项目中更加得心应手. 第一方面:开发速度的对比就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉 ...

  7. 【Hibernate】Hibernate的多表查询

    在<[Hibernate]Hibernate的聚类查询.分组查询.排序与时间之差>(点击打开链接)一文中已经讲述过怎样利用HQL语句代替SQL语句.进行聚类查询.分组查询.排序与时间之差的 ...

  8. Hibernate→ 《Hibernate程序开发》教材大纲

    Hibernate ORM 概览 Hibernate 简介 Hibernate 架构 Hibernate 环境 Hibernate 配置 Hibernate 会话 Hibernate 持久化类 Hib ...

  9. hibernate配置文件hibernate.cfg.xml和.hbm.xml的详细解释

    原文地址:http://blog.csdn.net/qiaqia609/article/details/9456489 hibernate.cfg.xml -标准的XML文件的起始行,version= ...

随机推荐

  1. Android中selector的使用

    第一种方法(强烈推荐) 方法:selector做遮罩,原图做background. 我们做按钮的时候经常需要用两个图片来实现按钮点击和普通状态的样式,这就需要提供两种图片,而且每个分辨率下还有多套图片 ...

  2. NOIP2011题解

    NOIP2011其实早就做完了....一直懒得写.... Day1 T1铺地毯 我什么都不想说,不会做您就没必要接着看了.... #include<iostream> using name ...

  3. ssr panel魔改前端登陆面板配置邮件服务

    1.注册 打开mailgun官网http://www.mailgun.com/ (昨天他反应打开比较慢,所以你得有点耐心,或者跟换你的DNS试试)   QQ截图20140731095618.png 点 ...

  4. jquery 选择器 且 或

    jquery选择器具有很强大的功能,基本的使用方法随处可见,jquery还提供了更为方便的使用. 且:$("div[id^='AAA_']div[id$='_DIV']"),此选择 ...

  5. 图像实验室 website 项目日志

    day 1 1.问题: 在演示界面选择浏览本地图片,上传以后不显示上传图片 原因:PIL库没有装好,参见之前博客重装 2.问题: 可以上传图片并在网站上显示,但是不能得到运行结果的图片. 原因:没有将 ...

  6. 【Unity与23种设计模式】适配器模式(Adapter)

    GoF中定义: "将一个类的接口转换成为客户端期待的类接口.适配器模式让原本接口不兼容的类能一起合作." 适配器模式与装饰模式有一定的相似之处 两者都是在着手解决C#不能多继承的问 ...

  7. Java 8 中 ConcurrentHashMap工作原理的要点分析

    简介: 本文主要介绍Java8中的并发容器ConcurrentHashMap的工作原理,和其它文章不同的是,本文重点分析了对不同线程的各类并发操作如get,put,remove之间是如何同步的,以及这 ...

  8. JDBC控制事务

    概念 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并 ...

  9. 转载NodePort,LoadBalancer还是Ingress?我该如何选择 - kubernetes

    原文:http://mp.weixin.qq.com/s/dHaiX3H421jBhnzgCCsktg ClusterIP ClusterIP服务是Kuberntets的默认服务.它在集群内部生成一个 ...

  10. 详解小白利用eclipse+CDT+MinGW搭建C++开发环境

    安装JDK.安装Eclipse     2.打开Eclipse 找到“help”下的“Eclipse marketplace” 如图:    3.选择相应的C插件: 因为安装过所以显示installe ...