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();方法。
相关推荐
博文链接:https://shaqiang32.iteye.com/blog/201918
Hibernate Core API是Java开发人员在使用Hibernate ORM框架时最常打交道的部分。它是Hibernate框架的核心组件,提供了对数据库操作的基本抽象和实现。版本3.3.1是该API的一个稳定版本,支持多种数据库交互功能,包括...
3. Configuration:配置对象,负责加载Hibernate的配置文件并初始化SessionFactory。 4. SessionFactory:会话工厂,是线程安全的,负责创建Session实例。 三、对象持久化 在Hibernate中,对象的生命周期分为临时态...
当我们调用SessionFactory().getCurrentSession()时,Hibernate会为我们提供一个已存在的或者新创建的Session实例,这个行为与直接调用SessionFactory.openSession()有所不同。`getCurrentSession()`方法旨在支持...
在Java的Hibernate框架中,`getCurrentSession()` 和 `openSession()` 都是用于获取与数据库交互的Session对象,但它们之间存在显著的区别。理解这些差异对于优化数据访问性能和管理事务至关重要。 首先,`...
Session session = sessionFactory.openSession(); ``` 4. **事务处理**:在Session中开启事务,执行数据库操作,并在操作完成后提交事务。 ```java Transaction tx = session.beginTransaction(); // 执行CRUD...
Hibernate 3 API 是一个广泛使用的Java对象关系映射(ORM)框架的重要版本,它极大地简化了Java开发者在数据库操作中的工作。这个API提供了丰富的功能,将数据库操作转化为面向对象的方式,使得代码更加简洁、可维护...
Spring3.0.2_API文档详细阐述了Spring的IoC容器、数据访问/集成、Web、AOP、工具类库等方面的内容。Spring的Bean工厂和ApplicationContext负责对象的生命周期管理,使得开发者可以专注于业务逻辑,而无需关心对象...
2. **SessionFactory**: 会话工厂`org.hibernate.SessionFactory` 是线程安全的,用于创建Session实例。 3. **Criteria API**: 提供了一种基于对象的查询方式,比SQL更面向对象,比如`org.hibernate.criterion....
本篇将详细解析Hibernate 4.1 Core API,帮助开发者深入理解其核心概念、类库和接口。 1. **对象关系映射(ORM)**:ORM是Hibernate的核心特性,它将Java对象与数据库表进行映射,使得程序员可以避免编写大量的SQL...
SessionFactory由Configuration实例通过读取配置文件和数据库元数据来创建,一旦创建完成,它就不再与数据库交互。 2. **Session**:Session是Hibernate的工作单元,代表了一个数据库连接。它负责执行CRUD操作,...
6. Configuration类:负责加载Hibernate配置文件(hibernate.cfg.xml),初始化SessionFactory。配置文件中包含了数据库连接信息、实体类信息等。 7. SessionFactory:是线程安全的,为应用提供多个Session实例。它...
2. **为什么使用getCurrentSession()**:与直接调用`openSession()`创建新的Session相比,`getCurrentSession()`有以下优势: - 它能够自动管理Session的生命周期,比如在请求结束时关闭Session,避免资源泄露。 -...
**hibernate_annotation_api** 在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。而Hibernate的注解API是其核心特性之一,允许开发者通过在Java类和属性上添加注解来...
3. 创建`SessionFactory`:调用`Configuration`的`buildSessionFactory()`方法。 例如: ```java Configuration config = new Configuration().configure(); ServiceRegistry serviceRegistry = new ...