`

Hibernate中的Configuration类和c3p0连接池【转】

阅读更多
Configuration类用来管理我们的配置文件的信息的,通过它,我们可以通过创建一个configuration实例来管理相应的配置文档,但是通常我们只创建一个configuration实例。
下面是一个通用的创建实例的代码
Java代码 复制代码
  1. try{   
  2.  sessionFactory = new Configuration().configure().buildSessionFactory();   
  3. }catch(HibernateException e){   
  4.  throw new RuntimeException(e.getMessage,e);   
  5. }  
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的代码如下。

  1. import org.hibernate.*;   
  2.   
  3. import org.hibernate.cfg.*;   
  4.   
  5. public class CoreSession {   
  6.   
  7. static SessionFactory sessionFactory;   
  8. //注意到这里的SessionFactory都是static的
  9. //初始化Hibernate,创建SessionFactory实例,只在该类被加载到内存时执行一次   
  10.   
  11. static{   
  12.   
  13.     try{   
  14.   
  15.          Configuration config = new Configuration().configure();   
  16.   
  17.          sessionFactory = config.buildSessionFactory();   
  18.   
  19.     } catch (Exception e) {   
  20.   
  21.         System.out.println(e.getMessage());   
  22.   
  23.     }   
  24.   
  25. }   
  26.   
  27. }   

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的代码如下。

  1. import org.hibernate.*;   
  2.   
  3. import org.hibernate.cfg.*;   
  4.   
  5. public class CoreSession {   
  6.   
  7. static SessionFactory sessionFactory;   
  8.   
  9. //初始化Hibernate,创建SessionFactory实例,只在该类被加载到内存时执行一次   
  10.   
  11. static{   
  12.   
  13.     try{   
  14.   
  15.        Configuration config = new Configuration();   
  16.   
  17.         config.addClass(BranchForm.class);   
  18.   
  19.         sessionFactory = config.buildSessionFactory();   
  20.   
  21.     } catch (Exception e) {   
  22.   
  23.         System.out.println(e.getMessage());   
  24.   
  25.     }   
  26.   
  27. }   
  28.   
  29. }


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与C3P0连接池概述 - **Hibernate**: 是一个全功能的Java持久层框架,它提供了对象关系映射(ORM)功能,使得Java应用可以方便地与数据库进行交互。...

    Hibernate+c3p0连接池SQLServer 2000

    ### Hibernate + c3p0 连接池与 SQL Server 2000 的配置与问题解决 #### 一、背景介绍 在Java开发环境中,Hibernate作为一款流行的ORM框架,能够提供一套强大的对象-关系映射机制,使得开发者可以更加便捷地进行...

    hibernate3.0+c3p0 重新自动连接

    `c3p0`连接池则为`Hibernate`提供了高效、稳定且可配置的数据库连接管理,帮助应用在数据库连接出现问题时能够自动恢复,从而提高系统的可用性和稳定性。 1. **c3p0简介** `c3p0`由Miquel Piera开发,它提供了一种...

    HibernateC3P0 数据库连接池架包.rar

    3. 初始化C3P0连接池:通过`hibernate.connection.provider_class`属性指定为`org.hibernate.connection.C3P0ConnectionProvider`。 四、使用HibernateC3P0 在Java代码中,我们可以通过SessionFactory对象来获取和...

    hibernate c3p0实例源码

    这个“hibernate c3p0实例源码”就是用来展示如何在Hibernate中集成并使用C3P0连接池的示例代码。 首先,我们需要了解Hibernate和C3P0的基本概念。Hibernate是一个强大的ORM(对象关系映射)框架,它允许开发者用...

    C3P0开源JDBC连接池

    例如,在Hibernate中,可以通过以下方式配置C3P0连接池: ```xml <hibernate-configuration> ... <property name="connection.pool_size">5 <property name="c3p0.min_size">5 <property name="c3p0.max_size...

    Hibernate2和Hibernate3连接池配置.doc

    本文将详细讲解Hibernate2和Hibernate3中如何配置连接池,以及官方推荐的C3P0、Proxool和DBCP等连接池的使用。 首先,我们需要了解的是,Hibernate2和Hibernate3对连接池的支持有所不同。在Hibernate2中,Apache的...

    数据库连接池以及hibernate对各种连接池的整合

    3. **命名空间变化**:不同Hibernate版本中,连接池提供类的全限定名可能不同,如C3P0在Hibernate 2和3中的配置类名差异。 配置示例: ```xml <hibernate-configuration> <!-- 配置C3P0连接池 --> ...

    Hibernate几种连接池的比较

    - 性能:C3P0和Proxool都比Hibernate内置的连接池表现更好。 - 稳定性:C3P0和DBCP经过了广泛测试,通常被认为是稳定的。 - 功能和灵活性:C3P0和Proxool提供了丰富的配置选项,允许对连接池进行更精细的控制。 - ...

    java hibernate连接池源码

    Hibernate,作为一个强大的ORM(Object-Relational Mapping)框架,它自身集成了多种连接池实现,如C3P0、Apache DBCP、HikariCP等,这些连接池可以帮助开发者更高效地管理和使用数据库连接。 配置Hibernate连接池...

    Hibernate结合C3P0的小例子

    然后,我们需要在Hibernate的配置文件(通常是hibernate.cfg.xml)中配置C3P0连接池。在`<session-factory>`标签内添加以下内容: ```xml <property name="hibernate.c3p0.min_size">5 <property name="hibernate....

    c3p0数据库缓冲池配置说明

    C3P0 是一个开源的 J2EE 连接池实现,它提供了一种简单的方法来管理和控制数据库连接资源,可以有效提高应用程序访问数据库的性能。在 Java 应用程序中,频繁地创建和关闭数据库连接会导致性能下降甚至系统崩溃。...

    创建hibernate的连接池及封装bean类的方式(图解)

    ### 创建Hibernate的连接池及封装Bean类的方式 #### 一、引言 在Java开发中,Hibernate作为一种流行的ORM(对象关系映射)框架,被广泛应用于数据库操作中。通过使用Hibernate,开发者可以更加高效地进行数据库操作...

    Hibernate与常用连接池的配置

    本文将详细介绍如何配置Hibernate与常见的连接池,如Apache的DBCP、C3P0以及HikariCP。 首先,让我们了解什么是连接池。数据库连接池在初始化时会创建一定数量的数据库连接,这些连接在应用中可以被重复使用,避免...

    Hibernate连接池的各种配置

    需要注意的是,虽然标签中提到了`proxool`,但在实际配置中,Hibernate的连接池配置通常是基于C3P0或者HikariCP等其他连接池实现。这里可能是由于混淆,但Proxool确实是一个早期的连接池实现,已被Apache废弃。在...

    Hibernate配置数据连接

    为了更好地管理和优化数据库连接资源,Hibernate支持多种连接池技术,例如c3p0和Proxool等。本文将详细介绍如何在Hibernate中配置这些连接池,并解释相关配置项的作用。 #### 二、Hibernate默认连接池配置 默认...

    HIbernate4.3.6整合c3p0所需jar

    Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [org.hibernate.connection.C3P0ConnectionProvider] as strategy [org.hibernate.engine.jdbc....

    hibernate配置连接池

    值得注意的是,尽管Proxool是一个不错的选择,但随着技术的发展,更现代的连接池如HikariCP、C3P0和Druid等已经变得更加流行,它们提供了更好的性能和稳定性。因此,根据项目的具体需求,你可能需要考虑使用这些更...

    hibernate连接池

    Hibernate,作为Java领域中流行的ORM(对象关系映射)框架,也支持连接池的配置和使用。 ### Hibernate与连接池 Hibernate通过JDBC(Java Database Connectivity)与数据库交互,而连接池则是在JDBC层面上进行优化...

Global site tag (gtag.js) - Google Analytics