体系结构简图:

这是一张体系结构的简图,其中的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. PKUWC2018游记

    PKUWC2018游记 Day -inf 从去年的12月底开始停课,到现在也有整整一个月的时间了. 前两周考的是OI赛制,后来就变成了IOI赛制. 整体上考的很炸,虐场的次数远少于被虐的次数. 关于去 ...

  2. 关系型数据库工作原理-查询优化器(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...

  3. epoll 实现回射服务器

    epoll是I/O复用模型中相对epoll和select更高效的实现对套接字管理的函数. epoll有两种模式 LT 和 ET 二者的差异在于 level-trigger 模式下只要某个 socket ...

  4. Linux 学习(01):Linux Shell

    进入命令行 在图形化桌面出现之前,与Unix系统进行交互的唯一方式就是借助由shell所提供的文本命令行界面(command line interface,CLI).CLI只能接受文本输入,也只能显示 ...

  5. JS 装饰器解析

    随着 ES6 和 TypeScript 中类的引入,在某些场景需要在不改变原有类和类属性的基础上扩展些功能,这也是装饰器出现的原因. 装饰器简介 作为一种可以动态增删功能模块的模式(比如 redux ...

  6. git将文件托管到github上遇到的问题

    先来一问题描述: 执行:$ git push -u origin master 结果Warning: Permanently added the RSA host key for IP address ...

  7. MSIL实用指南-字段的加载和保存

    字段有静态字段和非静态字段之分,它们的加载保存指令也是不一样的,并且非静态字段要生成this. 静态字段的加载加载静态字段的指令是Ldsfld.ilGenerator.Emit(OpCodes.Lds ...

  8. Junit test使用

    1.导入maven依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</arti ...

  9. 自动识别移动端还是PC端

    平时在开发中经常会遇到这样的需求,除了开发PC端之外,还会同时开发移动端.对于简单的页面,可以使用bootstrap之类的框架实现响应式页面,可是当页面很复杂的时候,就需要开发一个移动端页面,一个PC ...

  10. 交换排序—快速排序(Quick Sort)

    基本思想: 1)选择一个基准元素,通常选择第一个元素或者最后一个元素, 2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小.另一部分记录的 元素值比基准值大. 3 ...