Configuration接口:
a)AnnotationConfiguration
b)进行配置信息的管理
c)用来产生SessionFactory
d)可以在configure方法中指定hibernate配置文件
e)只需关注一个方法即:buildSessionFactory()
1.关于Configuration
什么叫做Configuration?
new 出来一个Configuration()方法,调它的configure()方法,
默认它会加载hibernate.cfg.xml文件,把配置信息读出来。
根据配置信息的数据库链接信息,生成出一个数据库连接池,就可以和数据库连接了。
如果hibernate.cfg.xml改名了(如改为hibernate.xml),可以用重载configure()方法指定文件名。
sessionFactory=new Configuration().configure("hibernate.xml").buildSessionFactory();
2.sessionFactory
sessionFactory里面维护的最重要的东西就是数据库连接池。
当它产生一个session的时候,会从里面拿一个连接(connection)给session。
也就是说,session中的conn就是sessionFactory通过配置文件里的配置信息,产生的数据库的连接池,从连接池中取出来的(session就等同于一个数据库的连接conn)
3.session
拿到session的方法:
方法1:
Session session=sessionFactory.openSession();
session.close();
方法2:
Session session=sessionFactory.getCurrentSession();
//不用session.close();
opensession与getCurrentSession区别:
opensession永远是新建一个session,而getCurrentSession从上下文里面拿一个已经存在的session(未提交),如果上下文不存在session就新建一个session。
验证:
Session session=sessionFactory.getCurrentSession();
Session session2=sessionFactory.getCurrentSession();
System.out.println(session==session2);
打印:true(没有提交之前,如果session提交过后再getCurrentSession就是新的了)
而
Session session=sessionFactory.openSession();
Session session2=sessionFactory.openSession();
System.out.println(session==session2);
打印false
什么是上下文(context)?
在hibernate.cfg.xml中,有以下的配置:
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
这就是指定拿到session的上下文。默认是从当前thread(线程)里面拿
不在这里指定的话就无法用getCurrentSession();方法
current_session_context_class可以设置以下的值:jpa,thread,managed,自己写的类来处理。
设置jpa是使用connection来管理。
a)AnnotationConfiguration
b)进行配置信息的管理
c)用来产生SessionFactory
d)可以在configure方法中指定hibernate配置文件
e)只需关注一个方法即:buildSessionFactory()
1.关于Configuration
什么叫做Configuration?
new 出来一个Configuration()方法,调它的configure()方法,
默认它会加载hibernate.cfg.xml文件,把配置信息读出来。
根据配置信息的数据库链接信息,生成出一个数据库连接池,就可以和数据库连接了。
如果hibernate.cfg.xml改名了(如改为hibernate.xml),可以用重载configure()方法指定文件名。
sessionFactory=new Configuration().configure("hibernate.xml").buildSessionFactory();
2.sessionFactory
sessionFactory里面维护的最重要的东西就是数据库连接池。
当它产生一个session的时候,会从里面拿一个连接(connection)给session。
也就是说,session中的conn就是sessionFactory通过配置文件里的配置信息,产生的数据库的连接池,从连接池中取出来的(session就等同于一个数据库的连接conn)
3.session
拿到session的方法:
方法1:
Session session=sessionFactory.openSession();
session.close();
方法2:
Session session=sessionFactory.getCurrentSession();
//不用session.close();
opensession与getCurrentSession区别:
opensession永远是新建一个session,而getCurrentSession从上下文里面拿一个已经存在的session(未提交),如果上下文不存在session就新建一个session。
验证:
Session session=sessionFactory.getCurrentSession();
Session session2=sessionFactory.getCurrentSession();
System.out.println(session==session2);
打印:true(没有提交之前,如果session提交过后再getCurrentSession就是新的了)
而
Session session=sessionFactory.openSession();
Session session2=sessionFactory.openSession();
System.out.println(session==session2);
打印false
什么是上下文(context)?
在hibernate.cfg.xml中,有以下的配置:
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
这就是指定拿到session的上下文。默认是从当前thread(线程)里面拿
不在这里指定的话就无法用getCurrentSession();方法
current_session_context_class可以设置以下的值:jpa,thread,managed,自己写的类来处理。
设置jpa是使用connection来管理。
注意getCurrentSession();与openSession();不要混用
转载请注明出处:http://blog.csdn.net/acmman