`
cakin24
  • 浏览: 1344791 次
  • 性别: 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 详解

    Session 在Hibernate中是一个重点,也是一个难点,本文主要对Session做一详尽的讲述。希望对正在学习Hibernate的朋友们有所帮助。

    hibernate中session对象的状态详解

    hibernate中session对象的状态详解

    搞定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缓存机制。 1.Hibernate缓存概述 2.Hibernate一级缓存(Session缓存) 3.Hibernate二级缓存 4.查询缓存 5.二级缓存的高级应用(分布式缓存)

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

    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应用详解,配置管理,session介绍等.

    Hibernate学习笔记和资料

    hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),hibernate中的对象状态以及刷新能缓存机制 ...

    Hibernate中Session增删改查操作代码详解

    主要介绍了Hibernate中Session增删改查操作代码详解,具有一定借鉴价值,需要的朋友可以参考下。

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

     3.5.2 访问Hibernate的Session接口  3.6 运行helloapp应用  3.6.1 创建运行本书范例的系统环境  3.6.2 创建helloapp应用的目录结构  3.6.3 把helloapp应用作为独立应用程序运行  3.6.4 把helloapp应用作为...

    Hibernate配置各种数据源详解

    <session-factory> <!– 各属性的配置–> <!—为true表示将Hibernate发送给数据库的sql显示出来 –> ”show_sql”>true <!– SQL方言,这边设定的是MySQL –> ”dialect”>...

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

    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.cfg.xml中配置信息详解

    Hibernate.cfg.xml 配置信息详解 Hibernate.cfg.xml 是 Hibernate 框架中的一份核心配置文件,用于配置 Hibernate 的行为和性能。该文件中包含了多个配置属性,用于控制 Hibernate 的各种功能和特性。本文将对 ...

    hibernate 框架详解

    Hibernate的统计(statistics)机制 4.5. 日志 4.6. 实现NamingStrategy 4.7. XML配置文件 4.8. J2EE应用程序服务器的集成 4.8.1. 事务策略配置 4.8.2. JNDI绑定的SessionFactory 4.8.3. JTA和Session的...

    让hibernate输出sql语句参数配置.doc

    Hibernate 配置参数详解 Hibernate 是一个流行的 ORM(Object-Relational Mapping)框架,广泛应用于 Java 企业应用开发中。为了提高 Hibernate 框架下的对象效率和开发效率,需要对其进行合理的配置。下面将详细...

    Hibernate5快速学习步骤

    本章学习目标  Hibernate 初认识  Hibernate 的Hello... hibernate.cfg.xml 配置详解  *.hbm.xml 对象映射文件详解  Hibernate 核心接口详解  抽取HibernateUtil 工具类  使用Session 接口进行增删改查

    Hibernate的Session_flush与隔离级别代码详解

    主要介绍了Hibernate的Session_flush与隔离级别代码详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

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

     3.5.2 访问Hibernate的Session接口  3.6 运行helloapp应用  3.6.1 创建运行本书范例的系统环境  3.6.2 创建helloapp应用的目录结构  3.6.3 把helloapp应用作为独立应用程序运行  3.6.4 把helloapp应用作为...

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

     3.5.2 访问Hibernate的Session接口  3.6 运行helloapp应用  3.6.1 创建运行本书范例的系统环境  3.6.2 创建helloapp应用的目录结构  3.6.3 把helloapp应用作为独立应用程序运行  3.6.4 把helloapp应用作为...

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

     3.5.2 访问Hibernate的Session接口  3.6 运行helloapp应用  3.6.1 创建运行本书范例的系统环境  3.6.2 创建helloapp应用的目录结构  3.6.3 把helloapp应用作为独立应用程序运行  3.6.4 把helloapp应用作为...

Global site tag (gtag.js) - Google Analytics