hibernate配置数据库连接池的三种方法
hibernate的基本用法

hibernate的基本用法Hibernate是一个开源的Java框架,用于简化数据库操作。
它为开发人员提供了一个更加简单、直观的方式来管理数据库,同时也提高了应用程序的性能和可维护性。
本文将逐步介绍Hibernate的基本用法,包括配置、实体映射、数据操作等。
一、配置Hibernate1. 下载和安装Hibernate:首先,我们需要下载Hibernate的压缩包并解压。
然后将解压后的文件夹添加到Java项目的构建路径中。
2. 创建Hibernate配置文件:在解压后的文件夹中,可以找到一个名为"hibernate.cfg.xml"的文件。
这是Hibernate的主要配置文件,我们需要在其中指定数据库连接信息和其他相关配置。
3. 配置数据库连接:在"hibernate.cfg.xml"文件中,我们可以添加一个名为"hibernate.connection.url"的属性,用于指定数据库的连接URL。
除此之外,还需要指定数据库的用户名和密码等信息。
4. 配置实体映射:Hibernate使用对象关系映射(ORM)来将Java类映射到数据库表。
我们需要在配置文件中使用"mapping"元素来指定实体类的映射文件。
这个映射文件描述了实体类与数据库表之间的对应关系。
二、实体映射1. 创建实体类:我们需要创建一个Java类,用于表示数据库中的一行数据。
这个类的字段通常与数据库表的列对应。
同时,我们可以使用Hibernate提供的注解或XML文件来配置实体的映射关系。
2. 创建映射文件:可以根据个人喜好选择使用注解还是XML文件来配置实体类的映射关系。
如果使用XML文件,需要创建一个与实体类同名的XML文件,并在其中定义实体类与数据库表之间的映射关系。
3. 配置实体映射:在配置文件中,我们需要使用"mapping"元素来指定实体类的映射文件。
ssh_Hibernate_连接池配置

• •
Hibernate连接池示意图
Java应用
Hibernate
ConnectionProvider接口 ConnectionProvider实现类
数据库连接池
DB
连接池的配置
• Hibernate目前支持的第三方连接池产品包括:C3P0、Proxool和DBCP, Hibernate官方优先推荐C3P0和Proxool • 通过JNDI方式 – 在Web容器(Tomcat为例)配置数据源(省略) – 在Hibernate.cfg.xml中配置 • hibernate.connection.datasource = java:comp/env/XXX • 普通的方式
配置Proxool(1)
• • 在src下建一个文件:proxool.xml 内容如下
• • • • • • • • • • • • • • • • • • • •
<?xml version="1.0" encoding="UTF-8"?> <proxool-config> <proxool> <alias>wenc</alias> <driver-url>jdbc:sqlserver://localhost:1433;databaseName=wencdb</driver-url> <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class> <driver-properties> <!-- SQLServeer <property name="username" value="sa" /> --> <property name=“user" value="sa" /><!-- MYSQL--> <property name="password" value="123456" /> </driver-properties> <house-keeping-sleep-time>90000</house-keeping-sleep-time> <maximum-new-connections>20</maximum-new-connections> <prototype-count>5</prototype-count> <maximum-connection-count>1000</maximum-connection-count> <minimum-connection-count>10</minimum-connection-count> </proxool> </proxool-config>
hibernate数据库连接池

throw new HibernateException(msg);
}
}
* Grab a connection
* @return a JDBC connection
* @throws SQLException
*/
public Connection getConnection() throws SQLException;
/**
* Release all resources held by this provider. JavaDoc requires a second sentence.
* @throws HibernateException
//加载数据库驱动程序
if (jdbcDriverClass==null) {
log.warn("No JDBC Driver class was specified by property " + Environment.DRIVER);
*/
public void close() throws HibernateException;
源码中的注释把方法功能描述的很具体,我再次就不再加介绍了,现在具体的拿出两个实现类来具体看一下他的功能;
1.1 C3P0ConnectionProvider implemห้องสมุดไป่ตู้nts ConnectionProvider
try {
//加载配置文件中的properties;
int minPoolSize = PropertiesHelper.getInt(Environment.C3P0_MIN_SIZE, props, 1);
跟我学Hibernate框架技术——有关数据库连接的系统配置技术

目录1.1Hibernate的数据库连接的系统配置技术 (2)1.1.1Hibernate系统的数据库连接配置 (2)1.1.2hibernate.cfg.xml配置文件 (7)1.1.3hibernate.cfg.xml文件中的各个标签的含义 (10)1.1.4采用hibernate.cfg.xml配置文件来配置Hibernate系统 (14)1.1.5Hibernate中的系统配置文件中的各个属性的说明 (17)1.1.6可编程方式实现Hibernate的系统配置 (27)1.1.7完整的程序代码示例 (31)1.1Hibernate的数据库连接的系统配置技术1.1.1Hibernate系统的数据库连接配置1、Hibernate系统的数据库连接的缺省配置由于Hibernate是为了能在各种不同环境下工作而设计的,因此存在着大量的配置参数。
幸运的是多数配置参数都有比较直观的默认值,并有随Hibernate一同分发的配置样例hibernate.properties(位于etc/)来展示各种配置选项。
我们所需做的仅仅是将这个样例文件复制到类路径(classpath)下做一些自定义的修改。
2、配置Hibernate系统的主要方式(1)Hibernate配置文件可以有两种格式Hibernate配置文件可以有两种格式●一种是hibernate.properties(默认文件名)●另一种是hibernate.cfg.xml(默认文件名)。
后者稍微方便一些,当增加*.hbm.xml映射文件的时候,我们可以直接在hibernate.cfg.xml 里面增加,而不必像hibernate.properties必须在初始化代码中加入。
Configuration hibernateConfiguration=new Configuration();hibernateConfiguration.addResource("Person.hbm.xml");hibernateConfiguration.addResource("Cat.hbm.xml");但不管怎么说,两种的配置项都是一样的这些配置文件包含了一系列属性及其属性值,Hibernate将根据这些属性来连接数据库。
Hibernate基本配置与操作

<property name="属性名" column="表的字段名"
type="..." length="" unique="true|false" not-null="true|false"/>
</class>
</hibernate-mapping>
4. session操作的典型代码:
Session session = ...;
Transaction tx = null;
try{
tx = session.beginTransaction();
session.save();....
mit();
Session session = factory.openSession();
☆4. Transaction:Hibernate对象底层事务的封装,默认采用手工提交事务方式,所以在进行CRUD操作时,要显示开启一个事务。
Transaction tx = session.beginTransaction();
5) update() 可以使一个脱管对象重附到新的session中, 成为持久化对象。
6) merge() 方法做合并。
传入瞬时对象,做插入。创建一个持久对象,把瞬时对象的状态复制过来,返回这个持久化对象。
传入脱管对象:先检查session缓存中有没有跟这个脱管对象的OID相同的持久化对象
<class name="实体类名" table="表名">
<id name="OID的名字" column="表的主键名" type="hibernate内置的映射类别">
数据库连接池的参数设置

数据库连接池的参数设置在进行数据库操作时,为了提高效率和性能,往往会使用数据库连接池。
数据库连接池是一种管理数据库连接的技术,它可以在应用程序启动时创建一定数量的数据库连接,并将这些连接保存在一个池中,供应用程序使用。
对于频繁进行数据库操作的应用程序来说,使用数据库连接池可以减少连接的创建和关闭的开销,提高数据库操作的效率。
数据库连接池的参数设置非常重要,不同的参数设置会对数据库连接池的性能和效果产生直接影响。
下面我将介绍一些常见的数据库连接池参数设置。
1. 初始连接数(InitialSize):指定连接池中初始化的连接数。
在应用程序启动时,连接池会创建这些连接并放入池中。
初始连接数的设置应根据应用程序的并发量和数据库的负载情况来确定,一般来说,初始连接数应该足够满足应用程序的并发需求,但也不能设置得过多,以免占用过多的系统资源。
2. 最小空闲连接数(MinIdle):指定连接池中保持的最小空闲连接数。
当应用程序不再使用连接时,连接池会将一部分连接保留在池中,以便下次使用。
最小空闲连接数的设置应根据应用程序的并发量和数据库的负载情况来确定。
如果设置得过小,可能导致连接池无法满足应用程序的并发需求;如果设置得过大,可能会浪费系统资源。
3. 最大空闲连接数(MaxIdle):指定连接池中保持的最大空闲连接数。
当连接池中的连接数量超过最大空闲连接数时,多余的连接会被关闭并从池中移除。
最大空闲连接数的设置应根据应用程序的并发量和数据库的负载情况来确定。
如果设置得过小,可能导致连接池无法满足应用程序的并发需求;如果设置得过大,可能会浪费系统资源。
4. 最大活动连接数(MaxActive):指定连接池中允许的最大活动连接数。
当连接池中的连接数量达到最大活动连接数时,新的连接请求会被阻塞,直到有连接被释放。
最大活动连接数的设置应根据应用程序的并发量和数据库的负载情况来确定。
如果设置得过小,可能导致连接池无法满足应用程序的并发需求;如果设置得过大,可能会导致数据库负载过高。
常用数据源连接池配置

-->
配置proxoop有些不同,不能仅仅加入,还需要改动: <property name="proxool.pool_alias">dbpool</property>
<property name="proxool.xml">test/huatech/conf/ProxoolConf.xml</property>
<property name="connection.password">informix</property>
<property name="connection.driver_class">rmix.jdbc.IfxDriver</property>
<property name="connection.url">
<!--登录密码-->
<property name="connection.password"></property>
<!--是否将运行期生成的SQL输出到日志以供调试-->
<property name="show_sql">true</property>
<!--指定连接的语言-->
... javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
Hibernate的连接池和数据源配置

Hibernate的三种连接池设置C3P0、Proxool和DBCP一、Hibernate连接池配置:Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP。
在配置连接池时需要注意的有三点:一、Apche的DBCP在Hibernate2中受支持,但在Hibernate3中已经不再推荐使用,官方的解释是这个连接池存在缺陷。
如果你因为某种原因需要在Hibernate3中使用DBCP,建议采用JNDI方式。
二、默认情况下(即没有配置连接池的情况下),Hibernate会采用内建的连接池。
但这个连接池性能不佳,且存在诸多BUG(笔者就曾在Mysql环境下被八小时连接悬空问题困扰过),因此官方也只是建议仅在开发环境下使用。
三、Hibernate2和Hibernate3的命名空间有所变化。
例如,配置C3P0时的provider_cla ss有Hibernate2环境下使用net.sf.hibernate.connection.C3P0ConnectionProvider,在Hibernate3环境下使用org.hibernate.connection.C3P0ConnectionProvider。
下面是Hibernate环境下几种常见的连接池配置:1.Hibernate默认连接池<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configurationPUBLIC "-//Hibernate/Hibernate Configuration DTD//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory ><!—JDBC驱动程序--><property nam e="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 连接数据库的URL--><property nam e="connection.url">jdbc:m ysql://localhost:3306/schoolproject</property><property nam e="eUnicode">t rue</property><property nam e="connection.characterEncoding">UTF-8</property><!--连接的登录名--><property nam e="ername">root</property><!—登录密码--><property nam e="connection.password"></property><!--是否将运行期生成的SQL输出到日志以供调试--><property nam e="show_sql">t rue</property><!--指定连接的语言--><property nam e="dialect">org.hibernate.dialect.MySQLDialect</property><!--映射Student这个资源--><mapping resource="com/wqbi/model/pojo/student.hbm.xml" /></session-factory></hibernate-configuration>2.C3P0连接配置<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configurationPUBLIC "-//Hibernate/Hibernate Configuration DTD//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory ><!—JDBC驱动程序--><property nam e="connection.driver_class">com.mysql.jdbc.Driver</property><!-- 连接数据库的URL--><property nam e="connection.url">jdbc:m ysql://localhost:3306/schoolproject</property><property nam e="eUnicode">t rue</property><property nam e="connection.characterEncoding">UTF-8</property><!--连接的登录名--><property nam e="ername">root</property><!--登录密码--><property nam e="connection.password"></property><!-- C3P0连接池设定--><property nam e="hibernate.connection.provider_class">org.hibernate.connectio n.C3P0ConnectionProvider</property><property nam e="hibernate.c3p0.m ax_size">20</property><property nam e="hibernate.c3p0.m in_size">5</property><property nam e="hibernate.c3p0.tim eout">120</property><property nam e="hibernate.c3p0.m ax_statem ents">100</property><property nam e="hibernate.c3p0.idle_test_period">120</property><property nam e="hibernate.c3p0.acquire_increment">2</property><!--是否将运行期生成的SQL输出到日志以供调试--><property nam e="show_sql">t rue</property><!--指定连接的语言--><property nam e="dialect">org.hibernate.dialect.MySQLDialect</property><!--映射Student这个资源--><mapping resource="com/wqbi/model/pojo/student.hbm.xml" /></session-factory></hibernate-configuration>3.proxool连接池(1) 先写proxool的配置文件,文件名:proxool.xml(一般放在与hibernate.cfg.xml文件在同一个目录中)本例配置的是MYSQL数据库,数据库的名字为schoolproject<?xml version="1.0" encoding="UTF-8"?><!-- the proxool configuration can be em bedded within your own application's.Anything outside the "proxool" tag is ignored. --><something-else-entirely><proxool><!--连接池的别名--><alias>DBPool</alias><!--proxool只能管理由自己产生的连接--><driver-url>jdbc:m ysql://localhost:3306/schoolproject?useUnicode=true&characterEnco ding=UTF8</driver-url><!—JDBC驱动程序--><driver-class>com.m ysql.jdbc.Driver</driver-class><driver-properties><property nam e="user" value="root"/><property nam e="password" value=""/></driver-properties><!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁--><house-keeping-sleep-tim e>90000</house-keeping-sleep-tim e><!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受--><maximu m-new-connections>20</maximum-new-connections><!-- 最少保持的空闲连接数--><prototype-count>5</prototype-count><!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定--><maximu m-connection-count>100</maximu m-connection-count><!-- 最小连接数--><minimum-connection-count>10</minimu m-connection-count></proxool></something-else-entirely>(2)配置hibernate.cfg.xml文件<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configurationPUBLIC "-//Hibernate/Hibernate Configuration DTD//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory ><property nam e="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property><property nam e="hibernate.proxool.pool_alias">DBPool</property><property nam e="hibernate.proxool.xml">proxoolconf.xml</property><!--是否将运行期生成的SQL输出到日志以供调试--><property nam e="show_sql">t rue</property><!--指定连接的语言--><property nam e="dialect">org.hibernate.dialect.MySQLDialect</property><!--映射Student这个资源--><mapping resource="com/wqbi/model/pojo/student.hbm.xml" /></session-factory></hibernate-configuration>(1) hibernate.connection.provider_class定义Hibernate的连接加载类,这里Proxool 连接池是用这个,不同的连接池有不同的加载类,可以查阅Hibernate文档获取相关信息(2) hibernate.proxool.pool_alias这里就是用我们上面提到的连接池的别名(3) hibernate.proxool.xml是向Hibernate声明连接池的配置文件位置,可以用相对或绝对路径,用相对路径时要注意一定在要Path范围内!不然会抛出异常。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
➢数据库连接池的概念(是什么,做什么用的,有什么好处)➢首先,我们还是老套的讲讲连接池的基本概念,概念理解清楚了,我们也知道后面是怎么回事了。
➢以前我们程序连接数据库的时候,每一次连接数据库都要一个连接,用完后再释放。
如果频繁的数据库操作,就会导致性能很低。
连接池的出现,为开发过程提供了一个很好的管理平台。
当程序中需要建立数据库连接时,只须从内存中取一个来用而不用新建。
同样,使用完毕后,只需放回内存即可。
而连接的建立、断开都有连接池自身来管理。
同时,我们还可以通过设置连接池的参数来控制连接池中的连接数、每个连接的最大使用次数等等。
通过使用连接池,将大大提高程序效率,同时,我们可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。
➢而Hibernate的出现把连接池的使用引入了一个新的利用方式,让你充分享受配置化给开发带来的便利。
1 C3P0 (以验证可用)只需在hibernate.cfg.xml中加入<property name="ername">omdssd_admin</property><property name="connection.password">omdssd_hskj</property><property name="connection.url">jdbc:oracle:thin:@10.142.1.138:1521:omds</property><property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><property name="dialect">org.hibernate.dialect.Oracle9Dialect</property><property name="format_sql">true</property><property name="show_sql">true</property><property name="myeclipse.connection.profile">oracle10g_112</property><property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property><property name="hibernate.c3p0.min_size">5</property> //连接池中数据库连接的最小数目<property name="hibernate.c3p0.max_size">30</property> //连接池中数据库连接的最大数目<property name="hibernate.c3p0.time_out">1800</property> //设定数据库连接的过期时间,以秒为单位<property name="hibernate.c3p0.max_statement">50</property> //可以被缓存的PreparedStatement实例的最大数目。
缓存适量的PreparedStatement实例,能够大大提高Hibernate的性能。
<property name="hibernate.c3p0.idle_test_period">120</property>//在使数据库连接自动生效之前处于空闲状态的时间,以秒为单位<property name="hibernate.c3p0.acquire_increment">2</property><mapping resource="com/hs/model/CountZrlineDay.hbm.xml" /> ……………………………………..还有在classespath中加入c3p0-0.9.1.2.jar2 dbcp(hibernate3.0中,已经不支持dbcp)在hibernate.cfg.xml中加入<property name="connection.driver_class">org.gjt.mm.mysql.Driver</property><property name="connection.url">jdbc:mysql://localhost:3306/test</property><!-- 数据库用户名--><property name="ername">root</property><!-- 数据库密码--><property name="connection.password">123456</property><property name="dbcp.maxActive">100</property><property name="dbcp.whenExhaustedAction">1</property><property name="dbcp.maxWait">60000</property><property name="dbcp.maxIdle">10</property>还有在classespath中加入commons-pool-1.2.jar 和commons-dbcp-1.2.1.jar.3 proxool在hibernate.cfg.xml中加入:<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property><property name="format_sql">true</property><property name="show_sql">true</property><property name="myeclipse.connection.profile">oracle10g_112</property><!-- 配置proxool数据库连接池 --><!-- 连接池的别名 --><property name="hibernate.proxool.pool_alias">Proxool_DB_Pool</property> <!-- 向Hibernate声明连接池的配置文件位置(和hibernate.cfg.xml放在一个目录下) --> <property name="hibernate.proxool.xml">ProxoolConf.xml</property><!-- 定义Hibernate的连接加载类,这里Proxool连接池是用这个,不同的连接池有不同的加载类-->org.hibernate.connection.ProxoolConnectionProvider</property><!--为false,当hibernate开始被调用时,就会初始化proxool连接池,进行数据库连接等操作 --> <property name="hibernate.proxool.existing_pool">true</property><mapping resource="com/hs/model/LxZrLineTowerMinute2.hbm.xml" />……………….然后,在和hibernate.cfg.xml同一个目录下,加一个ProxoolConf.xml文件,内容为<?xml version="1.0" encoding="UTF-8"?><!-- the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is ignored. --><something-else-entirely><proxool><!-- 连接池别名 --><alias>Proxool_DB_Pool</alias><!--proxool只能管理由自己产生的连接--><driver-url>jdbc:oracle:thin:@10.142.50.112:1521:omds</driver-url><driver-class>oracle.jdbc.driver.OracleDriver</driver-class><driver-properties><property name="user" value="omdssd_admin"/><property name="password" value="omdssd_hskj"/></driver-properties><!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁--><house-keeping-sleep-time>90000</house-keeping-sleep-time><!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受--><maximum-new-connections>20</maximum-new-connections><!-- 最少保持的空闲连接数--><prototype-count>5</prototype-count><!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定--><maximum-connection-count>100</maximum-connection-count><!-- 最小连接数--><minimum-connection-count>10</minimum-connection-count> </proxool></something-else-entirely>并在classespath中加入proxool-0.8.3.jar。