`

026_CoreAPI_Configuration_SessionFactory_GetCurrentSession_OpenSession

 
阅读更多

1.Configuration

 a)AnnotationConfiguration

 b)进行配置信息的管理

 c)用来产生SessionFactory()

 d)

 

sf = new AnnotationConfiguration().configure().buildSessionFactory();

.configure()去找hibernate.cfg.xml配置文件(进行数据库连接和产生连接池)

 

 

如果改变hibernate.cfg.xml名字,则在src下放sf = new AnnotationConfiguration().configure(“hi

 

bernate.xml”).buildSessionFactory();即可

 

 

 

2.public static SessionFactory sf = null;

 

可以理解为维护这数据库的连接池

产生session的工厂。

每个连接都能有一个数据库的链接。

 

使用getCurrentSession可以产生一个session

Session session = SessionFactory.getCurrentSession();

 

 

其实从Session session = SessionFactory.getCurrentSession();

session.connection()

可以看到其实这个session已经绑定了一个connection()

---哪来的呢,是SessionFactory通过配置文件里拿出配置信息产生的数据库连接池,

从那个数据库连接池里给你取出来的。

或是Session session = sf.openSession(),是永远创建新的session。

 

----用getCurrentSession()不用close();

---用openSession()用close()

 

区别:

1.

openSession永远打开新session

当前环境已经有session就拿原来的。

2.getCurrentSession();session没有提交前拿的是同一个。

 

Session session = SessionFactory.getCurrentSession();

 

 

其实从Session session = SessionFactory.getCurrentSession();

session.connection()

可以看到其实这个session已经绑定了一个connection()

---哪来的呢,是SessionFactory通过配置文件里拿出配置信息产生的数据库连接池,

从那个数据库连接池里给你取出来的。

或是Session session = sf.openSession(),是永远创建新的session。

 

----用getCurrentSession()不用close();

---用openSession()用close()

 

区别:

1.

openSession永远打开新session

当前环境已经有session就拿原来的。

 

2.getCurrentSession();session没有提交前拿的是同一个。

 

理解getCurrentSession的用处

1.对于一个用户管理系统,

client  (adduser())----->Usermanager (save(User)insert into user)---->UserDAO---->DB(User表)

                                     (addLog(insert into log())) ---->LogDAO ---->DB (Log表)

 

在这个情况就是用getCurrentSession进行同一个连接。

 

 

总结一下

1.opensession每次都是新的 

2.getCurrentSession  从上下文找,

   用途  界定事务边界。

   比如  插入一个数据+log日志表

 

3.open需要close

  get...事务提交后会自动close

 

4.什么叫上下文

是在配置文件制定的

 <!--<property name="current_session_context_class">thread</property>-->

从线程里面找这个对象。

 

手工管理用manage  很少用....

custom也少用自定义的。

jta  ejb3分布式再说

 

 

 

 

 

 

代码案例1:

 

    进行测试:

Session session = sf.openSession();

Session session2 = sf.openSession();

 

System.out.print("--------------------------------");

System.out.print(session == session2);

 

console结果:

     false

证明:

     openSession()每次都是新开的链接

 

 

代码案例2:

    1.进行测试

 

   Session session = sf.getCurrentSession();

Session session2 = sf.getCurrentSession();

System.out.print("--------------------------------");

System.out.print(session == session2);

 

  console结果:

           true

证明两个连接用的是同一个session。

   

     2.进行测试在事务提交之后再比较

Session session = sf.getCurrentSession();

 

//在hibernate中执行操作要在一个事务里面

session.beginTransaction();

session.save(t);

session.getTransaction().commit();

//在commit之后进行的获得getCurrentSession()

Session session2 = sf.getCurrentSession();

System.out.print("--------------------------------");

System.out.print(session == session2);

/*session.close();*/

 

  console返回:

    false

 

 

    

注意:

在使用Session session = sf.getCurrentSession();时,

1./hibernate_0500_CoreAPI/src/hibernate.cfg.xml这个要加上下文的配置信息

(<property name="current_session_context_class">thread</property>)

2.这个不需要session.close();方法。

 

1
1
分享到:
评论

相关推荐

    SessionFactory.getCurrentSession与openSession的区别

    博文链接:https://shaqiang32.iteye.com/blog/201918

    hibernate_core_API

    Hibernate Core API是Java开发人员在使用Hibernate ORM框架时最常打交道的部分。它是Hibernate框架的核心组件,提供了对数据库操作的基本抽象和实现。版本3.3.1是该API的一个稳定版本,支持多种数据库交互功能,包括...

    Hibernate 中文api文档下载.zip_API_Hibernate API _hibernate api

    3. Configuration:配置对象,负责加载Hibernate的配置文件并初始化SessionFactory。 4. SessionFactory:会话工厂,是线程安全的,负责创建Session实例。 三、对象持久化 在Hibernate中,对象的生命周期分为临时态...

    新Hibernate SessionFactory().getCurrentSession()猫腻

    当我们调用SessionFactory().getCurrentSession()时,Hibernate会为我们提供一个已存在的或者新创建的Session实例,这个行为与直接调用SessionFactory.openSession()有所不同。`getCurrentSession()`方法旨在支持...

    getCurrentSession 与 openSession() 的区别

    在Java的Hibernate框架中,`getCurrentSession()` 和 `openSession()` 都是用于获取与数据库交互的Session对象,但它们之间存在显著的区别。理解这些差异对于优化数据访问性能和管理事务至关重要。 首先,`...

    Hibernate_api.zip_hibernate api

    Session session = sessionFactory.openSession(); ``` 4. **事务处理**:在Session中开启事务,执行数据库操作,并在操作完成后提交事务。 ```java Transaction tx = session.beginTransaction(); // 执行CRUD...

    Hibernate_3 api

    Hibernate 3 API 是一个广泛使用的Java对象关系映射(ORM)框架的重要版本,它极大地简化了Java开发者在数据库操作中的工作。这个API提供了丰富的功能,将数据库操作转化为面向对象的方式,使得代码更加简洁、可维护...

    三大框架帮助文档合集(Spring3.0.2_API + Struts2.3.1_API + Hibernate3.2_API)

    Spring3.0.2_API文档详细阐述了Spring的IoC容器、数据访问/集成、Web、AOP、工具类库等方面的内容。Spring的Bean工厂和ApplicationContext负责对象的生命周期管理,使得开发者可以专注于业务逻辑,而无需关心对象...

    Struts_Hibernate API 文档 chm

    2. **SessionFactory**: 会话工厂`org.hibernate.SessionFactory` 是线程安全的,用于创建Session实例。 3. **Criteria API**: 提供了一种基于对象的查询方式,比SQL更面向对象,比如`org.hibernate.criterion....

    hibernate 4.1 core API 英文版

    本篇将详细解析Hibernate 4.1 Core API,帮助开发者深入理解其核心概念、类库和接口。 1. **对象关系映射(ORM)**:ORM是Hibernate的核心特性,它将Java对象与数据库表进行映射,使得程序员可以避免编写大量的SQL...

    hibernate 3.3 core API 英文版

    SessionFactory由Configuration实例通过读取配置文件和数据库元数据来创建,一旦创建完成,它就不再与数据库交互。 2. **Session**:Session是Hibernate的工作单元,代表了一个数据库连接。它负责执行CRUD操作,...

    Hibernate 3.3 core API

    6. Configuration类:负责加载Hibernate配置文件(hibernate.cfg.xml),初始化SessionFactory。配置文件中包含了数据库连接信息、实体类信息等。 7. SessionFactory:是线程安全的,为应用提供多个Session实例。它...

    ssh中getCurrentSession的使用

    2. **为什么使用getCurrentSession()**:与直接调用`openSession()`创建新的Session相比,`getCurrentSession()`有以下优势: - 它能够自动管理Session的生命周期,比如在请求结束时关闭Session,避免资源泄露。 -...

    hibernate_annotation_api

    **hibernate_annotation_api** 在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。而Hibernate的注解API是其核心特性之一,允许开发者通过在Java类和属性上添加注解来...

    HibernateSessionFactory 代码

    3. 创建`SessionFactory`:调用`Configuration`的`buildSessionFactory()`方法。 例如: ```java Configuration config = new Configuration().configure(); ServiceRegistry serviceRegistry = new ...

Global site tag (gtag.js) - Google Analytics