Configuration类用来管理我们的配置文件的信息的,通过它,我们可以通过创建一个configuration实例来管理相应的配置文档,但是通常我们只创建一个configuration实例。
下面是一个通用的创建实例的代码
- try{
-
sessionFactory = new Configuration().configure().buildSessionFactory();
-
}catch(HibernateException e){
-
throw new RuntimeException(e.getMessage,e);
- }
try{
sessionFactory = new Configuration().configure().buildSessionFactory();
}catch(HibernateException e){
throw new RuntimeException(e.getMessage,e);
}
在这里,我们看到:要创建一个Configuration,可以使用
Configuration config = new Configuration().configure();
这里我们要明白的是,Configuration是入口,通过它来获得配置文件。
同时Configuration还可以通过指定参数来传递:
下面看:
File file = new File("c:\\Hibernate.xml");
Configuration config = new Configuration().config(file);
同时,Configuration还有一些比较重要的方法:
addProperties();
setProperties();
下面看一下例子:
Properties properties = Porperties.load("a.properties");
Configuration configure = new Configuration().setProperties(properties).config();
同时还可以指定.hbm.xml文件,下面是几种方法:
addClass();
addFile();
addURL();
下面看一下例子:
Configuration configure = new Configuration().addClass(Order.class);
Configuration configure = new Configuration().addURL(Configuration.class.getResource(Order.hbm.xml));
Configuration configure = new Configuration().addFile("Order.hbm.xml");
下面简单的看一下SessionFactory类
首先看一下代码
Configuration configure = new Configuration().configure();
SessionFactory sessions = configure.buildSessionFactory();
这里要说明的是,SessionFactory是线程安全的,可以被多个线程调用。在我们实际开发中,我们可以在初始化的部分构造一个SessionFactory即可,比如,在一个公共静态类中初始化一个SessionFactory的readonly常量等等。它充当数据存储源的代理。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
============================================
Configuration:
负责管理Hibernate的配置信息,这些配置信息都是从配置文件hibernate.cfg.xml或者Hibernate.properties读取的,当然也可以自定义文件名称,只要在实例化Configuration的时候指定具体的路径就可以了;
SessionFactiory:
Configuration的实例会根据当前的配置信息,构造SessionFactory实例。SessionFactory是线程安全的,一般情况下一个应用中一个数据库共享一个SessionFactory实例。
构建SessionFactory
Hibernate的SessionFactory接口提供Session类的实例,Session类用于完成对数据库的操作。由于SessionFactory实例是线程安全的(而Session实例不是线程安全的),所以每个操作都可以共用同一个SessionFactory来获取Session。
Hibernate配置文件分为两种格式,一种是xml格式的配置文件,另一种是Java属性文件格式的配置文件,因此构建SessionFactory也有两种方法,下面分别介绍。
2.6.1 从XML文件读取配置信息构建SessionFactory
从XML文件读取配置信息构建SessionFactory的具体步骤如下。
(1)创建一个Configuration对象,并通过该对象的configura()方法加载Hibernate配置文件,代码如下。
Configuration config = new Configuration().configure();
configura()方法:用于告诉Hibernate加载hibernate.cfg.xml文件。Configuration在实例化时默认加载classpath中的hibernate.cfg.xml,当然也可以加载名称不是hibernate.cfg.xml的配置文件,例如wghhibernate.cfg.xml,可以通过以下代码实现。
Configuration config = new Configuration().configure("wghhibernate.cfg.xml");
(2)完成配置文件和映射文件的加载后,将得到一个包括所有Hibernate运行期参数的Configuration实例,通过Configuration实例的buildSessionFactory()方法可以构建一个惟一的SessionFactory,代码如下。
SessionFactory sessionFactory = config.buildSessionFactory();
构建SessionFactory要放在静态代码块中,因为它只在该类被加载时执行一次。一个典型的构建SessionFactory的代码如下。
-
import org.hibernate.*;
-
-
import org.hibernate.cfg.*;
-
-
public class CoreSession {
-
-
static SessionFactory sessionFactory;
- //注意到这里的SessionFactory都是static的
-
-
-
static{
-
- try{
-
- Configuration config = new Configuration().configure();
-
- sessionFactory = config.buildSessionFactory();
-
- } catch (Exception e) {
-
- System.out.println(e.getMessage());
-
- }
-
- }
-
- }
2.6.2 从Java属性文件读取配置信息构建SessionFactory
从Java属性文件读取配置信息构建SessionFactory的具体步骤如下。
(1)创建一个Configuration对象,此时Hibernate会默认加载classpath中的配置文件hibernate.properties,代码如下。
Configuration config = new Configuration();
(2)由于在配置文件中缺少相应的配置映射文件的信息,所以此处需要通过编码方式加载,这可以通过Configuration对象的
addClass()方法实现,具体代码如下。
config.addClass(BranchForm.class);
addClass()方法用于加载实体类。
(3)完成配置文件和映射文件的加载后,将得到一个包括所有Hibernate运行期参数的Configuration实例,通过Configuration实例
的buildSessionFactory()方法可以构建一个惟一的SessionFactory,代码如下。
SessionFactory sessionFactory = config.buildSessionFactory();
构建SessionFactory要放在静态代码块中,因为它只需在该类被加载时执行一次,一个典型的构建SessionFactory的代码如下。
-
import org.hibernate.*;
-
-
import org.hibernate.cfg.*;
-
-
public class CoreSession {
-
-
static SessionFactory sessionFactory;
-
-
-
-
static{
-
- try{
-
- Configuration config = new Configuration();
-
- config.addClass(BranchForm.class);
-
- sessionFactory = config.buildSessionFactory();
-
- } catch (Exception e) {
-
- System.out.println(e.getMessage());
-
- }
-
- }
-
- }
Session:
一般的持久化方法(CRUD)都是通过Session来调用的,Session是非线程安全的。
Session的创建与关闭 :Session是一个轻量级对象,通常将每个Session实例和一个数据库事务绑定,也就是每执行一个数据库事务,都应该先创建一个新的Session实例,在使用Session后,还需要关闭Session。
Session的创建
创建SessionFactory后,就可以通过SessionFactory创建Session实例,通过SessionFactory创建Session实例的代码如下。
Session session=sessionFactory.openSession();
创建Session后,就可以通过创建的Session进行持久化操作了。
Session的关闭
在创建Session实例后,不论是否执行事务,最后都需要关闭Session实例,释放Session实例占用的资源。
关闭Session实例的代码如下:session.close();
分享到:
相关推荐
### hibernate使用c3p0连接池的知识点详解 #### 一、Hibernate与C3P0连接池概述 - **Hibernate**: 是一个全功能的Java持久层框架,它提供了对象关系映射(ORM)功能,使得Java应用可以方便地与数据库进行交互。...
### Hibernate + c3p0 连接池与 SQL Server 2000 的配置与问题解决 #### 一、背景介绍 在Java开发环境中,Hibernate作为一款流行的ORM框架,能够提供一套强大的对象-关系映射机制,使得开发者可以更加便捷地进行...
`c3p0`连接池则为`Hibernate`提供了高效、稳定且可配置的数据库连接管理,帮助应用在数据库连接出现问题时能够自动恢复,从而提高系统的可用性和稳定性。 1. **c3p0简介** `c3p0`由Miquel Piera开发,它提供了一种...
3. 初始化C3P0连接池:通过`hibernate.connection.provider_class`属性指定为`org.hibernate.connection.C3P0ConnectionProvider`。 四、使用HibernateC3P0 在Java代码中,我们可以通过SessionFactory对象来获取和...
这个“hibernate c3p0实例源码”就是用来展示如何在Hibernate中集成并使用C3P0连接池的示例代码。 首先,我们需要了解Hibernate和C3P0的基本概念。Hibernate是一个强大的ORM(对象关系映射)框架,它允许开发者用...
例如,在Hibernate中,可以通过以下方式配置C3P0连接池: ```xml <hibernate-configuration> ... <property name="connection.pool_size">5 <property name="c3p0.min_size">5 <property name="c3p0.max_size...
本文将详细讲解Hibernate2和Hibernate3中如何配置连接池,以及官方推荐的C3P0、Proxool和DBCP等连接池的使用。 首先,我们需要了解的是,Hibernate2和Hibernate3对连接池的支持有所不同。在Hibernate2中,Apache的...
3. **命名空间变化**:不同Hibernate版本中,连接池提供类的全限定名可能不同,如C3P0在Hibernate 2和3中的配置类名差异。 配置示例: ```xml <hibernate-configuration> <!-- 配置C3P0连接池 --> ...
- 性能:C3P0和Proxool都比Hibernate内置的连接池表现更好。 - 稳定性:C3P0和DBCP经过了广泛测试,通常被认为是稳定的。 - 功能和灵活性:C3P0和Proxool提供了丰富的配置选项,允许对连接池进行更精细的控制。 - ...
Hibernate,作为一个强大的ORM(Object-Relational Mapping)框架,它自身集成了多种连接池实现,如C3P0、Apache DBCP、HikariCP等,这些连接池可以帮助开发者更高效地管理和使用数据库连接。 配置Hibernate连接池...
然后,我们需要在Hibernate的配置文件(通常是hibernate.cfg.xml)中配置C3P0连接池。在`<session-factory>`标签内添加以下内容: ```xml <property name="hibernate.c3p0.min_size">5 <property name="hibernate....
C3P0 是一个开源的 J2EE 连接池实现,它提供了一种简单的方法来管理和控制数据库连接资源,可以有效提高应用程序访问数据库的性能。在 Java 应用程序中,频繁地创建和关闭数据库连接会导致性能下降甚至系统崩溃。...
### 创建Hibernate的连接池及封装Bean类的方式 #### 一、引言 在Java开发中,Hibernate作为一种流行的ORM(对象关系映射)框架,被广泛应用于数据库操作中。通过使用Hibernate,开发者可以更加高效地进行数据库操作...
本文将详细介绍如何配置Hibernate与常见的连接池,如Apache的DBCP、C3P0以及HikariCP。 首先,让我们了解什么是连接池。数据库连接池在初始化时会创建一定数量的数据库连接,这些连接在应用中可以被重复使用,避免...
需要注意的是,虽然标签中提到了`proxool`,但在实际配置中,Hibernate的连接池配置通常是基于C3P0或者HikariCP等其他连接池实现。这里可能是由于混淆,但Proxool确实是一个早期的连接池实现,已被Apache废弃。在...
为了更好地管理和优化数据库连接资源,Hibernate支持多种连接池技术,例如c3p0和Proxool等。本文将详细介绍如何在Hibernate中配置这些连接池,并解释相关配置项的作用。 #### 二、Hibernate默认连接池配置 默认...
Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [org.hibernate.connection.C3P0ConnectionProvider] as strategy [org.hibernate.engine.jdbc....
值得注意的是,尽管Proxool是一个不错的选择,但随着技术的发展,更现代的连接池如HikariCP、C3P0和Druid等已经变得更加流行,它们提供了更好的性能和稳定性。因此,根据项目的具体需求,你可能需要考虑使用这些更...
Hibernate,作为Java领域中流行的ORM(对象关系映射)框架,也支持连接池的配置和使用。 ### Hibernate与连接池 Hibernate通过JDBC(Java Database Connectivity)与数据库交互,而连接池则是在JDBC层面上进行优化...