• 核心开发接口(一)


    1.Configuration

      进行配置信息的管理

      用来产生SessionFactory

      可以在configure方法中指定hibernate配置文件

      只需要关注一个方法即:buildSessionFactory()

    2.SessionFactory

      管理连接池

      用来产生Session,没产生一个session,就给它一个数据库连接

      Session session = sessionFactory.openSession();与Session session = sessionFactory.getCurrentSession();的区别

    openSession永远是创建新的Session,使用它的时候要用session.close();

    getCurrentSession()如果当前环境中有了session,就会拿当前环境的session,在这个session没有提交之前,无论拿多少个,都是同一个,一旦提交,再拿,就是新的了。用途是界定事务边界,事务提交时会自动colse()。什么叫上下文,上下文是在hibernate配置里面指定的current_session_context_class。所以使用这个方法的时候配置文件里要写<!-- Enable Hibernate's automatic session context management -->
            <property name="current_session_context_class">thread</property>看API文档,thread可以换成别的三个值,但thread比较长用。

    package hjj.lch.hibernate.model;
    
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.AnnotationConfiguration;
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.Test;
    
    public class HibernateCoreAPITest {
    
    private static SessionFactory sf = null;
        
        @BeforeClass
        public static void beforeClass(){
            sf = new AnnotationConfiguration().configure().buildSessionFactory();
        }
        
        @Test
        public void testTeacherSave() {
            Teacher t = new Teacher(); 
            t.setId(6);
            t.setName("fkdshf");
            t.setTitle("中级");
            
            Session session1 = sf.getCurrentSession();
            Session session3 = sf.getCurrentSession();
            System.out.println(session1 == session3);
            session1.beginTransaction();
            session1.save(t);
            session1.getTransaction().commit();
            
            Session session2 = sf.getCurrentSession();
            
            System.out.println(session1 == session2);
            session1.close();
        }
    
        @AfterClass
        public static void afterClass(){
            sf.close();
        }
    
    }

    结果为true  false,这种方法拿到的session在commit的时候会自动colse,所以session2又是一个新的了。session 是一个接口,可以实现它的类很多,所以Session session = sessionFactory.openSession();与Session session = sessionFactory.getCurrentSession();很有可能不是同一个实现,不能混用。

  • 相关阅读:
    [HNOI2007]最小矩形覆盖
    Java实现第十届蓝桥杯质数
    Redo current损坏
    [学习笔记]计算几何
    delete noprompt archivelog 报错ORA-00245,RMAN-08132
    [学习笔记]CDQ分治
    Java实现第九届蓝桥杯耐摔指数
    RAC RMAN 备份 RMAN-03009 ORA-19504 ORA-27040 RMAN-06012 channel c3 not allocated 错误分析
    [学习笔记]树套树
    RMAN-03002、RMAN-06059
  • 原文地址:https://www.cnblogs.com/ligui989/p/3456053.html
Copyright © 2020-2023  润新知