`

请您先登录,才能继续操作

Hibernate(22):openSession的执行细节及相对优势

阅读更多

Hibernate(21):getCurrentSession还是用openSession? 中, 我们从getCurrentSession执行细节上总结了这个方法生成session的优点. 本篇中,我们还从openSession的执行来看,openSession有没有优势,优势又是什么.

    我们先从sessionFactory.openSession()一句开始入手.

    在sessionFactory.openSession()方法里, hibernate又调用了sessionFactory实现类SessionFactoryImpl中的openSession (interceptor), interceptor是个什么? 它从哪里来的? 这里边是否藏着什么玄机? 看到其类型为org.hibernate.Interceptor接口,它是在new Configuration时由interceptor = EmptyInterceptor.INSTANCE语句赋了值, 而这个EmptyInterceptor.INSTANCE也正它名字说的那样, 没做什么事. 这样, 我们得出openSession(interceptor)时的interceptor没有给即将诞生的Session带来什么优势. (BTW, 这个interceptor一般用来干啥? 又怎么来设置? 待日后做针对性实验观察)

    接着看openSession(interceptor)又调用的openSession(Connection connection,boolean autoClose,long timestamp,Interceptor sessionLocalInterceptor)方法.这个方法中参数connection为null, autoClose为false. 有一个long类型的timestamp,它是干啥的? 料它也不会对session的创建带来什么优势,不过"搂草打兔子 " 地把它也研究下. 看SessionImpl类,发现timestamp的存在仅仅是为了实现SessionImplementor接口里定义的方法 getTimestamp. 再往下追,这个getTimestamp方法在哪调用? 主要用来做什么? 有如下所示的调用:

 


上面getTimestamp的调用中timestamp大多是作为txTimestamp的,与事务有关, 待日后再专门研究,此篇中先放它一马.

    这样,一个session就创建出来了, 那跟getCurrentSession相比,有什么优势呢?答案是: 没有.
------------------
结语. 用了两个篇幅, 从源码层面上仔细对比了getCurrentSession跟openSession相比的优势,见Hibernate(21):getCurrentSession还是用openSession 中 的总结.  那么跟跟openSession相比,getCurrentSession在使用上有什么注意的呢? 到现在发现的一个就是,由于getCurrentSession方法返回的session在做事务的commit时, session可能会自动给关掉,这样若自己的代码中再调用session.close时就抛出了"Session was already closed"异常, 这也正是这一系列博客的引子.  

  • 大小: 13.5 KB
2
0
分享到:
评论

相关推荐

    Hibernate执行持久层访问步骤

    《Hibernate执行持久层访问步骤详解》 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者使用面向对象的方式进行数据操作,而无需关注底层的SQL语句。本文将...

    hibernate的jar包

    Hibernate是一个强大的Java持久化框架,它为开发人员提供了一种简单、高效的方式来管理数据库操作。在Java应用程序中,Hibernate作为对象关系映射(ORM)工具,使得开发者可以通过处理Java对象来间接操作数据库,...

    hibernate 执行原生sql的几种方式

    在Java的持久化框架Hibernate中,执行原生SQL(Native SQL)是常见需求,尤其是在处理特定数据库特性或者优化性能时。本篇文章将详细介绍在Hibernate中执行原生SQL的几种方式,以及它们各自的适用场景和优缺点。 1....

    day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询

    1. **缓存机制**:Hibernate支持第一级缓存(Session级别的缓存)和第二级缓存(SessionFactory级别的缓存),合理利用可以减少对数据库的访问次数。 2. **懒加载**:对于一对多、多对多关联关系,可以通过懒加载只...

    10Hibernate 程序设计

    我们将详细阐述其基本概念、对象-关系映射、优势、下载与设置、以及通过实例学习如何使用Hibernate。 【标签】:HibernatePDF 【正文】: 1. Hibernate概述: Hibernate是一个开源的Java持久层框架,主要功能是...

    Hibernate笔记完整版

    在实际应用中,还需要注意日志配置、缓存管理、性能优化等方面,以充分利用Hibernate的优势。通过深入理解Hibernate的工作原理和API,开发者可以更高效地处理数据库操作,减少手动编写SQL的繁琐工作,提升开发效率。

    spring hibernate执行存储过程的例子

    Hibernate 3.2及以上版本开始支持存储过程的调用,主要通过Session的createSQLQuery方法。 ```java SessionFactory sessionFactory = ...; // 获取SessionFactory Session session = sessionFactory.openSession();...

    SpringMVC+Spring+hibernate配置

    SpringMVC、Spring和Hibernate是Java开发中三大重要的框架,它们各自负责Web应用程序的不同层面,协同工作以构建高效、可维护的系统。SpringMVC作为Spring框架的一部分,主要用于处理HTTP请求,Spring则提供了依赖...

    hibernate面试题及答案

    - **自动化**:Hibernate能够自动生成SQL语句,并自动执行,极大地减少了程序员编写和维护SQL代码的工作量。 - **数据库无关性**:Hibernate支持多种数据库系统,如MySQL、Oracle等,这使得在更换数据库时几乎不...

    hibernate 环境搭建

    implementation 'org.hibernate:hibernate-core:5.4.32.Final' ``` 5. **JDBC驱动**: 需要添加MariaDB的JDBC驱动依赖,例如对于Maven: ```xml <groupId>org.mariadb.jdbc <artifactId>mariadb-java-client ...

    hibernate学习一:简单应用1配置文件版

    在IT行业中,Hibernate是一个非常重要的Java持久化框架,它简化了数据库操作,使得开发者可以更加专注于业务逻辑,而不是底层的数据存储。本篇文章将探讨“Hibernate学习一:简单应用1配置文件版”,主要涵盖如何...

    hibernate Maven仓库资源

    1. **Hibernate框架介绍**:Hibernate是一个开源的Java ORM框架,它允许开发人员将Java类与数据库表进行映射,通过对象模型进行数据库操作。它支持JPA(Java Persistence API),并提供了丰富的查询语言HQL...

    hibernate-release-4.3.9.Final.rar

    - hibernate-core.jar:Hibernate的主要实现,包括核心API、持久化机制和查询语言(HQL)。 - jta.jar:Java Transaction API,用于处理事务管理。 - antlr.jar:ANTLR库,用于解析HQL和Criteria查询。 - dom4j....

    hibernate-release-5.2.2.Final.zip

    - 缓存策略:Hibernate提供了第一级缓存(Session级别的缓存)和第二级缓存(SessionFactory级别的缓存),可以显著提高性能。 -延迟加载(Lazy Loading):只在真正需要时才加载关联的对象,减少数据库访问。 -...

    Hibernate中的查询:HQL、Criteria、原生SQl

    Hibernate允许在需要时直接执行SQL查询,如下所示: ```java String sql = "SELECT * FROM USER"; SQLQuery query = session.createSQLQuery(sql); query.addEntity(User.class); List<User> users = query.list();...

    Java Hibernate

    - **缓存(Cache)**:Hibernate 提供了一级缓存和二级缓存机制,以提高查询性能和减少数据库负载。 - **查询语言**:除了支持标准的 SQL 查询外,Hibernate 还提供了一种名为 HQL(Hibernate Query Language)的...

    Hibernate示例

    **Hibernate 框架简介** Hibernate 是一个强大的 Java ORM(对象关系映射)框架,它允许开发者将数据库操作与业务逻辑解耦,提高了开发效率。ORM 技术的核心是将数据库中的表映射为 Java 类,通过对象的方式来操作...

    hibernate.jar包

    - 对SQL的灵活性限制:Hibernate的HQL虽然强大,但在复杂的SQL查询方面仍不如原生SQL。 - 学习曲线:对于初学者,理解ORM的概念和Hibernate的使用可能需要一定时间。 - 性能问题:在大数据量、高并发场景下,如果...

    hibernate.txt

    ### Hibernate概述与关键技术知识点 **标题解读:** "hibernate.txt"暗示了文档内容将围绕Hibernate框架展开,这是Java领域内一个非常重要的对象关系映射(Object-Relational Mapping,简称ORM)工具。 **描述解析...

Global site tag (gtag.js) - Google Analytics