`
cakin24
  • 浏览: 1368134 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

hibernate的session详解

阅读更多
一 opensession与getCurrentSession的区别
1、 getCurrentSession在事务提交或者回滚之后会自动关闭,而openSession需要手动关闭。如果使用openSession而没有手动关闭,多次之后会导致连接池溢出。
2、openSession每次创建新的session对象,getCurrentSession使用现有的session对象。
 
二 测试openSession每次创建新的session对象
1、测试代码
        @Test
        public void testOpenSession(){
            // 创建配置对象  
            Configuration config = new Configuration().configure();
            // 创建服务注册对象
            ServiceRegistry serviceRegistery = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
            // 创建会话工厂对象
            SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistery);
            // 创建会话对象
            Session session1 = sessionFactory.openSession();
            Session session2 = sessionFactory.openSession();
            System.out.println(session1==session2);                        
        }
2、运行结果
false
 
三 测试getCurrentSession使用现有的session对象
1、测试代码
        @Test
        public void testGetCurrentSession(){
            // 创建配置对象  
            Configuration config = new Configuration().configure();
            // 创建服务注册对象
            ServiceRegistry serviceRegistery = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
            // 创建会话工厂对象
            SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistery);
            // 创建会话对象
            Session session1 = sessionFactory.getCurrentSession();
            Session session2 = sessionFactory.getCurrentSession();
            System.out.println(session1==session2);
        }
2、运行结果
true
 
四 openSession用完后必须手动关闭,否则会溢出
1、测试代码
       @Test
        public void testSaveStudentswithOpenSession(){
            // 创建配置对象  
            Configuration config = new Configuration().configure();
            // 创建服务注册对象
            ServiceRegistry serviceRegistery = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
            // 创建会话工厂对象
            SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistery);
            // 创建会话对象
            Session session1 = sessionFactory.openSession();
            // 开启事务
            Transaction transaction = session1.beginTransaction();
                Students s= new Students(1,"张三丰","男",new Date(),"武当山");
                session1.doWork(new Work(){
 
                        @Override
                        public void execute(Connection connection) throws SQLException {
                                // TODO Auto-generated method stub
                                System.out.println("connection hashCode:"+connection.hashCode());
                        }
                });
                session1.save(s);
                //session.close();
                transaction.commit();
                
                Session session2 = sessionFactory.openSession();
                transaction = session2.beginTransaction();
                s= new Students(2,"李四","男",new Date(),"武当山");
                session2.doWork(new Work(){
 
                        @Override
                        public void execute(Connection connection) throws SQLException {
                                // TODO Auto-generated method stub
                                System.out.println("connection hashCode:"+connection.hashCode());
                        }
                });
                session2.save(s);
                transaction.commit();
        }
2、测试结果
connection hashCode:1048278180
Hibernate:
    insert
    into
        STUDENTS
        (SNAME, GENDER, BIRTHDAY, ADDRESS, SID)
    values
        (?, ?, ?, ?, ?)
connection hashCode:156943829
Hibernate:
    insert
    into
        STUDENTS
        (SNAME, GENDER, BIRTHDAY, ADDRESS, SID)
    values
        (?, ?, ?, ?, ?)
 
五 getCurrentSession不用关闭session
1、测试代码
        @Test
        public void testSaveStudentswithGetCurrentSession(){
                 // 创建配置对象  
            Configuration config = new Configuration().configure();
            // 创建服务注册对象
            ServiceRegistry serviceRegistery = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
            // 创建会话工厂对象
            SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistery);
            // 创建会话对象
            Session session1 = sessionFactory.getCurrentSession();
            // 开启事务
            Transaction transaction = session1.beginTransaction();
                Students s= new Students(1,"张三丰","男",new Date(),"武当山");
                session1.doWork(new Work(){
                        @Override
                        public void execute(Connection connection) throws SQLException {
                                // TODO Auto-generated method stub
                                System.out.println("connection hashCode:"+connection.hashCode());
                        }
                });
                session1.save(s);
                transaction.commit();
                
                Session session2 = sessionFactory.getCurrentSession();
                transaction = session2.beginTransaction();
                s= new Students(2,"李四","男",new Date(),"武当山");
                session2.doWork(new Work(){
 
                        @Override
                        public void execute(Connection connection) throws SQLException {
                                // TODO Auto-generated method stub
                                System.out.println("connection hashCode:"+connection.hashCode());
                        }
                });
                session2.save(s);
                transaction.commit();
        }
2、运行结果
connection hashCode:455886737
Hibernate:
    insert
    into
        STUDENTS
        (SNAME, GENDER, BIRTHDAY, ADDRESS, SID)
    values
        (?, ?, ?, ?, ?)
connection hashCode:455886737
Hibernate:
    insert
    into
        STUDENTS
        (SNAME, GENDER, BIRTHDAY, ADDRESS, SID)
    values
        (?, ?, ?, ?, ?)

 

1
0
分享到:
评论

相关推荐

    HIbernate Session 详解

    ### HIbernate Session 详解 #### 一、Session在Hibernate中的地位及作用 在Hibernate框架中,`Session` 是一个非常核心且重要的组件。作为Hibernate提供的主要操作数据库的接口,`Session` 不仅承担着保存、更新...

    hibernate session详细方法,值得珍藏

    ### Hibernate Session 详解:值得珍藏的深度解析 在Java持久化领域,Hibernate无疑占据了举足轻重的地位,而`Hibernate Session`则是其中的核心组件之一,它提供了与数据库交互的主要接口,是对象/关系映射(ORM)...

    hibernate中session对象的状态详解

    hibernate中session对象的状态详解

    hibernate包详解+hibernatePPT

    1. **缓存机制**:Hibernate支持一级缓存(Session级)和二级缓存(SessionFactory级),可以显著提升性能。 2. **批处理**:批量插入、更新和删除数据,减少数据库交互次数。 3. **延迟加载(Lazy Loading)**:只...

    hibernate和session学习

    【hibernate与Session详解】 Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库的强大工具。通过Hibernate,我们可以将数据库中的表与Java类进行映射,从而实现对...

    Hibernate的详解

    **Hibernate详解** Hibernate是一款强大的Java持久化框架,它简化了数据库与Java对象之间的交互,使得开发者无需关注SQL的编写,可以更加专注于业务逻辑。本文将深入探讨Hibernate的核心概念、主要功能以及如何在...

    hibernate配置文件详解

    Hibernate 配置文件详解 Hibernate 是一个流行的 ORM(Object-Relational Mapping)框架,用于简化 Java 应用程序中的数据库交互。 Hibernate 的配置文件是其核心组件之一,用于定义 Hibernate 的运行期参数。下面...

    Hibernate缓存深入详解 from ITEye

    **Hibernate缓存深入详解** 在Java企业级应用开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,随着应用规模的扩大,数据访问性能成为了一个不可忽视的问题。这时,...

    Hibernate缓存深入详解

    【Hibernate缓存深入详解】 在Java的持久化框架Hibernate中,缓存机制是提升系统性能的关键因素。它位于Hibernate应用和数据库之间,减少了对数据库的直接访问,从而提高了应用程序的运行速度。缓存中存储的是...

    hibernate--5.Hibernate配置文件详解-2

    标题"hibernate--5.Hibernate配置文件详解-2"暗示我们将继续上一节的内容,进一步深入理解Hibernate配置文件的各个方面。通常,Hibernate的配置文件以`hibernate.cfg.xml`的形式存在,它是项目初始化和连接数据库的...

    hibernate--5.Hibernate配置文件详解

    标题"hibernate--5.Hibernate配置文件详解"暗示我们将探讨的是Hibernate 5版本的配置细节。这个版本引入了一些新特性和改进,同时也保持了对前一版本的兼容性。配置文件是Hibernate的核心部分,它定义了与数据库的...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    12.2.3 Session(提供Connection) 12.3 使用Hibernate操作数据库的示例 12.3.1 创建数据库表 12.3.2 编写表对应的JavaBean 12.3.3 编写JavaBean对应的Xml 12.3.4 编写Hibernate的配置文件 12.3.5 编写并验证测试...

    Hibernate技术详解

    ### Hibernate技术详解 #### 一、Hibernate简介与特点 Hibernate是一种开源的对象关系映射(ORM)框架,用于Java持久化应用程序。它通过提供强大的映射工具和服务,将面向对象的数据模型映射到基于SQL的关系数据库...

    Hibernate缓存详解

    **Hibernate缓存详解** 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。为了提高数据访问性能,Hibernate引入了缓存机制,它可以减少对数据库的直接访问,从而提升应用的...

    Struts1.2+Spring1.2+Hibernate2.0搭建详解

    通过SessionFactory,我们可以创建Session对象,进而进行数据库操作。 7. **配置数据源**: 配置数据源信息,包括数据库连接池,这通常是通过Spring的DataSource bean来实现的。这样,Spring可以根据配置信息自动...

    Hibernate 参数配置详解

    ### Hibernate 参数配置详解 #### 一、概述 Hibernate 是一款流行的 Java 持久层框架,它通过提供一套丰富的 API 和配置选项来简化数据库访问。本文档将深入探讨 Hibernate 的核心配置参数及其功能,帮助开发者更...

    hibernate 实践 Query详解

    在这个“hibernate 实践 - Query详解”的主题中,我们将深入理解如何使用Query接口来执行SQL查询,并绑定参数。 1. **Query接口** Query接口是Hibernate提供的一种用于执行HQL(Hibernate查询语言)或SQL查询的API...

Global site tag (gtag.js) - Google Analytics