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包。

原文地址:https://www.cnblogs.com/wangliyue/p/4131627.html