Hibernate工作原理

持久化:持久化是将程序数据在持久状态和瞬时状态间转换的机制.JDBC就是一种持久化机制,文件IO也是一种持久化机制。

ORM:即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。

Hibernate:Hibernate是一个高性能的对象关系型持久化存储和查询的非侵入式框架,Hibernate不仅关注于从Java类到数据库表的映射,另外也提供了数据查询和检索服务,是一个ORM框架。

支持的数据库

Hibernate支持几乎所有的主要RDBMS。以下是一些由Hibernate所支持的数据库引擎。

  • HSQL Database Engine
  • DB2/NT
  • MySQL
  • PostgreSQL
  • FrontBase
  • Oracle
  • Microsoft SQL Server Database
  • Sybase SQL Server
  • Informix Dynamic Server

下面是一个详细的Hibernate应用程序体系结构视图以及一些重要的类。

图片

下面的部分简要地描述了在Hibernate应用程序架构所涉及的每一个类对象。

配置对象

配置对象是你在任何Hibernate应用程序中创造的第一个Hibernate对象,并且经常只在应用程序初始化期间创造。它代表了Hibernate所需一个配置或属性文件。配置对象提供了两种基础组件。

  • 数据库连接:由Hibernate支持的一个或多个配置文件处理。这些文件是  hibernate.properties  和  hibernate.cfg.xml
  • 类映射设置:这个组件创造了Java类和数据库表格之间的联系。

SessionFactory对象

配置对象被用于创造一个SessionFactory对象,使用提供的配置文件为应用程序依次配置Hibernate,并允许实例化一个会话对象.SessionFactory是一个线程安全对象并由应用程序所有的线程所使用。

SessionFactory是一个重量级对象所以通常它都是在应用程序启动时创造然后留存为以后使用。每个数据库需要一个SessionFactory对象使用一个单独的配置。所以如果你使用多种数据库那么你要创造多个SessionFactory对象。

 1)线程安全:该实例对象何以被多个线程共享

  2)重量级:该实例对象的构造和销毁消耗系统资源,所以一般在应用程序启动的时候就构造实例对象,一般一个数据库对应一个会话工厂的实例对象,如果要访问多个数据库,就需要创建多个该实例对象。

  3)SessionFactory的实例对象中维护了一个很大的缓存,存放了一些预定义的SQL语句和XML配置文件的信息,另外还维持了一个休眠的第二级缓存(缓存了所有会话对象所加载的POJO对象),用来保存在该生命周期中的一些业务对象,但是这个第二级缓存默认是关闭的,必须在XML中配置才可以开放

会话对象

一个会话被用于与数据库的物理连接.Session对象是轻量级的,并被设计为每次实例化都需要与数据库的交互。持久对象通过Session对象保存和检索。

会话对象不应该长时间保持开启状态因为它们通常情况下并非线程安全,并且它们应该按照所需创造和销毁。

简单来说用来对对象的保存,更新,删除和查询(处理业务)

特点:

  1)线程不安全,要避免同一个会话对象被多个线程共享,一般一个线程对应一个会话

  2)轻量级:可以随意的构造和销毁该实例对象。

  3)会话对象中维护了一个缓存,称为休眠的第一级缓存(缓存了当前会话对象所加载的POJO对象)每个会话对象都有自己的缓存。

交易对象

一个事务代表了与数据库工作的一个单元并且大部分RDBMS支持事务功能。在Hibernate中事务由底层事务管理器和事务(来自JDBC或者JTA)处理。

这是一个选择性对象,Hibernate应用程序可能不选择使用这个接口,而是在自己应用程序代码中管理事务。

查询对象

查询对象使用SQL或者Hibernate查询语言(HQL)字符串在数据库中来检索数据并创造对象。一个查询的实例被用于连结查询参数,限制由查询返回的结果数量,并最终执行查询。

Query query = session.createQuery("from Student where studentId=1");
Student s = (Student)query.uniqueResult();

标准对象

跟查询一样,以面向对象的形式和数据库进行复杂的CRUD操作,还适用于动态查询。

 

hibernate工作流程:
1.通过Configuration config = new Configuration().configure();//读取并解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>读取并解析映射信息(或者通过pojo注解)
3.通过SessionFactory sf = config.buildSessionFactory();//创建SessionFactory
4.Session session = sf.openSession();//打开Sesssion
5.Transaction tx = session.beginTransaction();//创建并启动事务Transation
6.persistent operate操作数据,持久化操作
7.tx.commit();//提交事务
8.关闭Session
9.关闭SesstionFactory

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值