`
gaojingsong
  • 浏览: 1211838 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【JAVA之Hibernate运行原理】

阅读更多



 

1、Hibernate运行过程:

1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件

2.由hibernate.cfg.xml中的<mappingresource="com/xx/User.hbm.xml"/>读取并解析映射信息

3.通过config.buildSessionFactory();//创建SessionFactory

4.sessionFactory.openSession();//打开Sesssion

5.session.beginTransaction();//创建事务Transation

6.persistent operate持久化操作 //一般指Save这个方法

7.session.getTransaction().commit();//提交事务

8.关闭Session

9.关闭SesstionFactory



 

 

2、Hibernate核心接口

以下5个核心接口几乎在任何实际开发中都会用到。通过这些接口,你不仅可以存储和获得持久对象,并且能够进行事务控制。

Session接口 Session接口对于Hibernate 开发人员来说是一个最重要的接口。然而在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目中确实很重要,因为在客户程序中,可能会不断地创建以及销毁Session对象,如果Session的开销太大,会给系统带来不良影响。

SessionFactory 接口 这里用到了一个设计模式――工厂模式,用户程序从工厂类SessionFactory中取得Session的实例。  令你感到奇怪的是SessionFactory并不是轻量级的!实际上它的设计者的意图是让它能在整个应用中共享。典型地来说,一个项目通常只需要一个SessionFactory就够了,但是当你的项目要操作多个数据库时,那你必须为每个数据库指定一个SessionFactory。 SessionFactory在Hibernate中实际起到了一个缓冲区的作用,它缓冲了Hibernate自动生成的SQL语句和一些其它的映射数据,还缓冲了一些将来有可能重复利用的数据。

Configuration 接口 Configuration接口的作用是对Hibernate进行配置,以及对它进行启动。在Hibernate的启动过程中,Configuration类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。

Query和Criteria接口 Query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。 Criteria接口与Query接口非常类似,它允许你创建并执行面向对象的标准化查询。 值得注意的是Query接口也是轻量级的,它不能在Session之外使用。

Callback 接口 当一些有用的事件发生时――例如持久对象的载入、存储、删除时,Callback接口会通知Hibernate去接收一个通知消息。一般而言,Callback接口在用户程序中并不是必须的,但你要在你的项目中创建审计日志时,你可能会用到它。以下是它的策略接口:

*主键的生成 (IdentifierGenerator 接口)

*本地SQL语言支持 (Dialect 抽象类)

*缓冲机制 (Cache 和CacheProvider 接口)

*JDBC 连接管理 (ConnectionProvider接口)

*事务管理 (TransactionFactory, Transaction, 和 TransactionManagerLookup 接口)

*ORM 策略 (ClassPersister 接口)

*属性访问策略 (PropertyAccessor 接口)

*代理对象的创建 (ProxyFactory接口)

Hibernate为以上所列的机制分别创建了一个缺省的实现,因此如果你只是要增强它的某个策略的功能的话,只需简单地继承这个类就可以了,没有必要从头开始写代码。

 


3、Hibernate两级Cache

Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存由hibernate管理的,一般情况下无需进行干预;第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存。这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载,属于多事务级别,要防止事务并发性。

缓存是以map的形式进行存储的(key-id,value-object)

一级缓存(Session):

   事务范围,每个事务(Session)都有单独的第一级缓存.

   一级缓存的管理:当应用程序调用Session的save()、update()、saveOrUpdate()、get()或load(),以及调用查询接口的 list()、iterate()--(用的是n+1次查询,先查id)或filter()方法时,如果在Session缓存中还不存在相应的对象,Hibernate就会把该对象加入到第一级缓存中。当清理缓存时,Hibernate会根据缓存中对象的状态变化来同步更新数据库。 Session为应用程序提供了两个管理缓存的方法: evict(Object obj):从缓存中清除参数指定的持久化对象。 clear():清空缓存中所有持久化对象,flush():使缓存与数据库同步。

当查询相应的字段如(name),而不是对象时,不支持缓存。

 

二级缓存(SessionFactory):

  Hibernate的二级缓存策略的一般过程如下:

 

   1:条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL句查询数据库,一次获得所有的数据对象(这个问题要考虑,如果你查询十万条数据时,内存不是被占用)。

 

  2:把获得的所有数据对象根据ID放入到第二级缓存中。

 

  3: 当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。

 

   4:删除、更新、增加数据的时候,同时更新缓存。

 

  Hibernate的二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用。为此,Hibernate提供了针对条件查询的Query Cache。

 

 

a)什么样的数据适合存放到第二级缓存中?

 

    1.很少被修改的数据

 

    2.不是很重要的数据,允许出现偶尔并发的数据

 

    3.不会被并发访问的数据

 

    4.参考数据,指的是供应用参考的常量数据,它的实例数目有限,它的实例会被许多其他类的实例引用,实例极少或者从来不会被修改。

 

b)不适合存放到第二级缓存的数据?

 

    1 经常被修改的数据

 

    2 财务数据,绝对不允许出现并发

 

    3 与其他应用共享的数据。

 

c)常用的缓存插件 Hibernater 的二级缓存是一个插件,下面是几种常用的缓存插件:

  EhCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,对Hibernate的查询缓存提供了支持。

  OSCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,提供了丰富的缓存数据过期策略,对Hibernate的查询缓存提供了支持。

  SwarmCache:可作为群集范围内的缓存,但不支持Hibernate的查询缓存。

  JBossCache:可作为群集范围内的缓存,支持事务型并发访问策略,对Hibernate的查询缓存提供了支持。

 

配置二级缓存的主要步骤:

 

  1 选择需要使用二级缓存的持久化类,设置它的命名缓存的并发访问策略。这是最值得认真考虑的步骤。

 

  2 选择合适的缓存插件,然后编辑该插件的配置文件。

 

 

 4、使用Hibernate操作数据库七个步骤

(1)读取并解析配置文件

Configuration conf = new Configuration().configure();

 

(2)读取并解析映射信息,创建SessionFactory

SessionFactory sf = conf.buildSessionFactory();

 

(3)打开Session

Session session = sf.openSession();

 

(4)开始一个事务(增删改操作必须,查询操作可选)

Transaction tx = session.beginTransaction();

 

(5)数据库操作

session.save(user);//或其它操作

 

(6)提交事务(回滚事务)

tx.commit();(tx.rollback();)

 

(7)关闭session

session.close();

 

QBC查询就是通过使用Hibernate提供的Query By Criteria API来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口。

  • 大小: 47.9 KB
  • 大小: 125.1 KB
  • 大小: 164 KB
0
0
分享到:
评论
1 楼 myDayComing 2016-09-18  
谢谢大神总结汇总,学习中

相关推荐

    java基本数据类型字节大小 hibernate运行原理

    ### Hibernate运行原理简介 Hibernate是一个开放源代码的对象关系映射框架(Object-Relational Mapping, ORM)。它提供了一种将Java对象映射到关系数据库表中的机制,并且支持多种数据库系统。下面是Hibernate的...

    java模拟hibernate实现

    本项目通过Java的反射和注解技术,试图模拟Hibernate的部分功能,以便更好地理解和掌握ORM的核心原理。 1. **Java反射**: 反射是Java提供的一种强大的动态类型特性,允许程序在运行时获取类的信息(如类名、属性、...

    hibernate-tutorials_java_hibernate_Eclipse_fallenweg_

    这些概念是理解Hibernate工作原理的基础,本教程将逐一解析。 5. **EntityManager** `EntityManager`是Java Persistence API(JPA)的一部分,它在Hibernate中提供了与数据库交互的接口。通过`EntityManager`,...

    Spring,SpringMvc,Hibernate

    标题中的"Spring,SpringMvc,Hibernate"涉及到的是Java开发中常用的三个开源框架,它们在企业级Web应用开发中起着核心作用。以下是这三个框架的详细解释: **Spring框架**是Java开发中的一个全面的轻量级容器,它...

    来自Java Persistence With Hibernate的示例

    本篇将深入探讨“Java Persistence with Hibernate”的核心概念,并通过具体的示例来帮助理解其工作原理和使用方法。 一、Hibernate简介 Hibernate是一个开源的Java库,它提供了在Java应用程序中与关系数据库进行...

    JAVA-hibernate笔记

    配置文件(通常是hibernate.cfg.xml)是Hibernate运行的基础,包含数据库连接信息、方言设置、缓存策略等。学习配置文件的编写,是掌握Hibernate的关键步骤。 5. **ID生成策略** Hibernate提供了多种主键生成策略...

    java java hibernate

    总之,理解Java和Hibernate的概念、工作原理以及如何在项目中应用它们,对于成为一名专业的Java开发者至关重要。在实际开发中,还需要关注性能优化、最佳实践和最新版本的更新,以确保应用的高效稳定。

    hibernate+mysql基本原理示例

    【hibernate+mysql基本原理示例】 在Java Web开发中,Hibernate是一个强大的对象关系映射(ORM)框架...实践是检验理论的最好方式,所以亲自运行这个示例,深入理解每个步骤,对于提升你的Java Web开发技能大有裨益。

    java hibernate c3p0

    【标题】:“Java Hibernate C3P0”是一个关于Java编程中的持久化框架Hibernate与C3P0连接池的讨论。Hibernate是Java领域广泛使用的对象关系映射(ORM)框架,它简化了数据库操作,使开发者可以使用面向对象的方式来...

    精通Hibernate:Java持久化对象技术详解[第二版]

    《精通Hibernate:Java持久化对象技术详解[第二版]》是一部深入探讨Hibernate框架的专业书籍,旨在帮助Java开发者熟练掌握和运用这一强大的ORM(Object-Relational Mapping)工具。Hibernate是Java开发领域中广泛...

    Hibernate原理

    ### Hibernate原理深度解析 #### Hibernate为何重要? Hibernate作为一款开源的对象关系映射(ORM)框架,在Java开发领域占据着举足轻重的地位。其重要性体现在以下几个方面: 1. **资源管理**:Hibernate通过...

    Hibernate 工作原理图Hibernate 工作原理图

    ### Hibernate工作原理详解 #### 一、概述 Hibernate 是一款开放源代码的 ORM(Object ...掌握 Hibernate 的工作原理对于提升 Java 应用程序的开发效率和性能至关重要。希望本文能为读者提供有价值的参考和启发。

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     3.6.4 把helloapp应用作为Java Web应用运行  3.7 小结  3.8 思考题 第4章 hbm2java和hbm2ddl工具  4.1 创建对象-关系映射文件  4.1.1 定制持久化类  4.1.2 定制数据库表  4.2 建立项目的目录结构  4.3 运行...

    北大青鸟ACCP6.0 第三学期 Y2 JAVA方向 hibernate框架

    【北大青鸟ACCP6.0 第三学期 Y2 JAVA方向 hibernate框架】是一个针对Java开发者的学习资源,主要聚焦于Hibernate这一流行的关系对象映射框架。Hibernate作为一个强大的ORM(Object-Relational Mapping)工具,它简化...

    hibernate 反射原理

    Hibernate是一个流行的Java ORM框架,其核心功能之一就是利用反射将Java对象映射到数据库表。当Hibernate在运行时处理实体类时,它会通过反射机制来解析实体类的结构,包括字段、构造函数和方法,以此来确定如何将...

    Spring+Hibernate+Struts工作原理

    Spring通过Java的反射机制,在运行时动态地创建和装配对象。这样做的好处是可以降低组件之间的耦合度,提高代码的可测试性和可维护性。 此外,Spring还提供了面向切面编程(Aspect-Oriented Programming,简称AOP)...

    java视频教程_hibernate3.3.2_项目源码

    【描述】提到"java视频教程_hibernate项目源码 大家可下载调试运行",这意味着这个教程不仅包括理论讲解,还提供了实际的项目源代码供学习者下载。通过下载这些源代码,学习者能够亲自运行和调试,加深对Hibernate...

    java hibernate框架代码

    在实际项目中,结合hibernate-release-4.1.6.Final的源码,开发者可以深入理解Hibernate的内部工作原理,学习如何优化配置,以及如何根据具体需求进行扩展和定制。通过这个版本的代码,我们可以看到Hibernate对JPA的...

    Hibernate Hibernate5 讲义 PDF

    Hibernate使用配置好的映射文件和主配置文件,在运行时自动将数据对象转换成数据库中的记录,并且可以将数据库记录转换回数据对象。Hibernate的懒加载、缓存策略以及事务管理等高级特性,使得它能高效地与关系型...

    java常用包Hibernate EJB Oracle

    在Java开发领域,`Hibernate`、`EJB`和`Oracle`是三个非常重要的概念,它们代表了不同的技术栈和工具。在这个压缩包中,很可能包含了一些常用的Java库,帮助开发者进行数据库操作、企业级应用开发以及与Oracle数据库...

Global site tag (gtag.js) - Google Analytics