精华内容
下载资源
问答
  • Hibernate 连接配置配置

    千次阅读 2019-02-28 11:52:04
    1、Hibernate内置连接hibernate.cfg.xml文件内容: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/...

    1、Hibernate内置连接池

    hibernate.cfg.xml文件内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    	<session-factory>
    		<!-- Database connection settings -->
    		<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
    		<property name="connection.url">jdbc:mysql://192.168.56.101:3306/bookstore?useSSL=false</property>
    		<property name="connection.username">billy</property>
    		<property name="connection.password">xxxxxx</property>
    		<property name="show_sql">true</property>
    
    		<mapping class="com.zhangdb.hibernate.Book" />
    	</session-factory>
    </hibernate-configuration>

    以上配置没有明确说明使用何种类型连接池,Hibernate会使用内置的连接池实现,采用默认值。这种实现并非面向生产环境,多用于开发测试。

    2、javax.sql.DataSource连接池

    Hibernate可以与javax.sql.DataSource类型的连接池集成,通过JNDI方式直接从连接池取得连接。

    以Tomcat为例,可以修改Tomcat的conf下的context.xml文件,在这里边定义连接数据库的信息及连接池配置。当然context.xml文件也可以放置在web项目下的META-INF目录下。前者Tomcat下的所有WEB都可以使用,后者则只有当前WEB应用可以使用。内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Context>
    	<Resource
    		name="jdbc/bookstore"
    		auth="Container"
    		type="javax.sql.DataSource"
    		maxActive="10"
    		maxIdle="3"
    		maxWait="10000"
    		driverClassName="com.mysql.cj.jdbc.Driver"
    		url="jdbc:mysql://192.168.56.101:3306/bookstore?useSSL=false"
    		username="billy"
    		password="xxxxxx" />
    </Context>

    在web应用的web.xml中引用该资源,如:

    <web-app>
    	<resource-ref>
    		<description>DB Connection</description>
    		<res-ref-name>jdbc/bookstore</res-ref-name>
    		<res-type>javax.sql.DataSource</res-type>
    		<res-auth>Container</res-auth>
    	</resource-ref>
    </web-app>

    hibernate的配置文件改为如下内容:

    <hibernate-configuration>
    	<session-factory>
    		<!-- Database connection settings -->
    		<property name="connection.datasource">java:comp/env/jdbc/bookstore</property>
    		<property name="dialect">org.hibernate.dialect.MySQL8Dialect</property>
    		<property name="show_sql">true</property>
    
    		<mapping class="com.zhangdb.hibernate.Book" />
    	</session-factory>
    </hibernate-configuration>

    关键是这句话:<property name="connection.datasource">java:comp/env/jdbc/bookstore</property>

    这样Hibernate就可以直接使用由Tomcat容器管理的连接池。

    如何为Tomcat设置数据库连接池资源,参考文档:https://www.codejava.net/servers/tomcat/configuring-jndi-datasource-for-database-connection-pooling-in-tomcat

    3、C3P0数据库连接池

    javax.sql.DataSource连接池是由Tomcat容器管理的,也可以创建由项目自己管理的数据库连接池,C3P0是其中一种。

    首先引入C3P0的相关jar包,如果用maven管理依赖,则在项目的pom文件中加入如下内容:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-c3p0</artifactId>
        <version>5.4.1.Final</version>
    </dependency>

    hibernate.cfg.xml内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    	<session-factory>
    		<!-- Database connection settings -->
    		<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
    		<property name="connection.url">jdbc:mysql://192.168.56.101:3306/bookstore?useSSL=false</property>
    		<property name="connection.username">billy</property>
    		<property name="connection.password">******</property>
    
    		<!-- Database connection pool setting -->
    		<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
    		<property name="hibernate.c3p0.min_size">5</property>
    		<property name="hibernate.c3p0.max_size">20</property>
    		<property name="hibernate.c3p0.timeout">120</property>
    		<property name="hibernate.c3p0.idle_test_period">3000</property>
    		<property name="show_sql">true</property>
    
    		<mapping class="com.zhangdb.hibernate.Book" />
    	</session-factory>
    </hibernate-configuration>

    里边既包括数据库连接配置信息,也包含C3P0连接池配置信息。C3P0的连接池属性还有很多,它实现了很多功能,可参考相关文档查看。

    4、Proxool数据库连接池

    导入proxool依赖包,pom配置:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-proxool</artifactId>
        <version>5.4.1.Final</version>
    </dependency>

    在项目class path目录下增加proxool.xml配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <something-else-entirely>
      <proxool>
        <alias>ProxoolPool</alias>
        <driver-url>jdbc:mysql://192.168.56.101:3306/bookstore?useSSL=false</driver-url>
        <driver-class>com.mysql.cj.jdbc.Driver</driver-class>
        <driver-properties>
          <property name="user" value="billy"/>
          <property name="password" value="******"/>
        </driver-properties>
         
        <maximum-connection-count>20</maximum-connection-count>  
        <minimum-connection-count>5</minimum-connection-count> 
        <house-keeping-sleep-time>90000</house-keeping-sleep-time> 
        <maximum-new-connections>10</maximum-new-connections> 
        <prototype-count>5</prototype-count>  
        <test-before-use>true</test-before-use> 
        <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>    
      </proxool>
    </something-else-entirely>

    hibernate.cfg.xml内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    	<session-factory>
    		<!-- Proxool Database connection settings -->
    		<property name="hibernate.proxool.pool_alias">ProxoolPool</property>
    		<property name="hibernate.proxool.xml">proxool.xml</property>
    		<property name="hibernate.connection.provider_class">org.hibernate.proxool.internal.ProxoolConnectionProvider</property>
    		<property name="show_sql">true</property>
    
    		<mapping class="com.zhangdb.hibernate.Book" />
    	</session-factory>
    </hibernate-configuration>

    5、其它连接池配置

    除了以上四种方式,Hibernate还支持其它类型的数据库连接池配置。详细可参考:http://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#database

    展开全文
  • Hibernate连接配置

    2014-05-22 18:43:51
    ...在Hibernate连接配置时需要注意的有三点: 一、Apche的DBCP在Hibernate2中受支持,但在Hibernate3中已经不再推荐使用,官方的解释是这个连接池存在缺陷。如果你因为某种原因需要在H

    http://cowbane.iteye.com/blog/494434

    Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP。在Hibernate连接池配置时需要注意的有三点:

    一、Apche的DBCP在Hibernate2中受支持,但在Hibernate3中已经不再推荐使用,官方的解释是这个连接池存在缺陷。如果你因为某种原因需要在Hibernate3中使用DBCP,建议采用JNDI方式。

    二、默认情况下(即没有配置连接池的情况下),Hibernate会采用内建的连接池。但这个连接池性能不佳,且存在诸多BUG(笔者就曾在Mysql环境下被八小时连接悬空问题困扰过),因此官方也只是建议仅在开发环境下使用。

    三、Hibernate2和Hibernate3的命名空间有所变化。例如,配置C3P0时的provider_class有Hibernate2环境下使用net.sf.hibernate.connection.C3P0ConnectionProvider,在Hibernate3环境下使用org.hibernate.connection.C3P0ConnectionProvider。

    下面是Hibernate环境下几种常见的连接池配置:

    1.默认Hibernate连接池配置

    <?xml version='1.0' encoding='UTF-8'?>  
    <!DOCTYPE hibernate-configuration   
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"   
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
    <hibernate-configuration>  
    <session-factory >  
    <!—JDBC驱动程序-->  
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>  
    <!-- 连接数据库的URL-->  
    <property name="connection.url">    
    jdbc:mysql://localhost:3306/schoolproject   
    </property>  
    <property name="connection.useUnicode">true</property>  
    <property name="connection.characterEncoding">UTF-8</property>  
    <!--连接的登录名-->  
    <property name="connection.username">root</property>  
    <!—登录密码-->  
    <property name="connection.password"></property>  
    <!--是否将运行期生成的SQL输出到日志以供调试-->  
    <property name="show_sql">true</property>  
    <!--指定连接的语言-->  
    <property name="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-configuration   
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"   
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
    <hibernate-configuration>  
    <session-factory >  
    <!—JDBC驱动程序-->  
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>  
    <!-- 连接数据库的URL-->  
    <property name="connection.url">    
    jdbc:mysql://localhost:3306/schoolproject   
    </property>  
    <property name="connection.useUnicode">true</property>  
    <property name="connection.characterEncoding">UTF-8</property>  
    <!--连接的登录名-->  
    <property name="connection.username">root</property>  
    <!--登录密码-->  
    <property name="connection.password"></property>  
         
    <!-- C3P0连接池设定-->  
    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider   
    </property>  
    <property name="hibernate.c3p0.max_size">20</property>  
    <property name="hibernate.c3p0.min_size">5</property>  
    <property name="hibernate.c3p0.timeout">120</property>  
    <property name="hibernate.c3p0.max_statements">100</property>  
    <property name="hibernate.c3p0.idle_test_period">120</property>  
    <property name="hibernate.c3p0.acquire_increment">2</property>  
    <!--是否将运行期生成的SQL输出到日志以供调试-->  
    <property name="show_sql">true</property>  
    <!--指定连接的语言-->  
    <property name="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 embedded within your own application's.    
    Anything outside the "proxool" tag is ignored. -->    
    <something-else-entirely>  
    <proxool>  
    <!--连接池的别名-->  
    <alias>DBPool</alias>  
    <!--proxool只能管理由自己产生的连接-->  
    <driver-url>  
    jdbc:mysql://localhost:3306/schoolproject?useUnicode=true&characterEncoding=UTF8  
    </driver-url>  
    <!—JDBC驱动程序-->  
    <driver-class>com.mysql.jdbc.Driver</driver-class>  
    <driver-properties>  
    <property name="user" value="root"/>  
    <property name="password" value=""/>  
    </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>   


    (2)配置hibernate.cfg.xml文件

    <?xml version='1.0' encoding='UTF-8'?>  
    <!DOCTYPE hibernate-configuration   
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"   
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
    <hibernate-configuration>  
    <session-factory >  
    <property name="hibernate.connection.provider_class">  
    org.hibernate.connection.ProxoolConnectionProvider   
    </property>  
    <property name="hibernate.proxool.pool_alias">DBPool</property>  
    <property name="hibernate.proxool.xml">proxoolconf.xml</property>  
    <!--是否将运行期生成的SQL输出到日志以供调试-->  
    <property name="show_sql">true</property>  
    <!--指定连接的语言-->  
    <property name="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范围内!不然会抛出异常。 
    (4)dialect是声明SQL语句的方言 
    (5)show_sql定义是否显示Hibernate生成的SQL语言,一般在调试阶段设为true,完成后再改成false,这样有利于调试。 
    (6)<mapping >资源文件映射 


    4.JNDI连接池 
       数据源已经由应用服务配置好(如Web服务器),Hibernate需要做的只是通过JNDI名查找到此数据源。应用服务器将连接池对外显示为JNDI绑定数据源,它是javax.jdbc.Datasource类的一个实例。只要配置一个Hibernate文件,如:hibernate.properties 

    hibernate.connection.datasource=java:/comp/env/jdbc/schoolproject //JNDI名   
    hibernate.transaction.factory_class = org.hibernate.transaction.JTATransactionFactory   
    hibernate.transaction.manager_loopup_class =   
    org.hibernate.transaction.JBossTransactionManagerLookup   
    hibernate.dialect=org.hibernate.dialect.MySQLDialect  

    结论: 
       由于在hibernate3.0中,已经不再支持dbcp了,hibernate的作者在hibernate.org中,明确指出在实践中发现dbcp有 BUG,在某些种情会产生很多空连接不能释放,所以抛弃了对dbcp的支持。我不知是否在dbcp最新版本中解决了这个问题,我以前在一个访问量不大的项目中用过dbcp,运行了一年多都没出现问题。不过在网上的确也有不少网友指出dbcp在大型的应用中会出现不稳定的情况。所以在真相未经证实的情况下,我觉得对dbcp持慎重的态度。 
       至于c3p0,有评论说它的算法不是最优的,而且,我在matrix中,见到有网友做了一个实验,在同一项目中分别用了几个常用的连接池,然后测试其性能,发现c3p0占用资源比较大,效率也不高。 
       所以,基于上述原因,我才花两晚的时间去研究proxool的配置,proxool不少行家推荐使用,而且暂时来说,是负面评价是最少的一个。在三星中也有项目是用proxool的。 

    (1) DBCP连接池 
    DBCP连接池是Apache软件基金组织下的一个开源连接池实现。 
    需要: commons-dbcp-1.2.1.jar //连接池的实现 
    commons-pool.jar //连接池实现的倚赖库 
    commons-collection.jar //连接池实现的倚赖库 

    package wyd.spring.datasource.dbcp;  
    
    
    import java.sql.Connection;  
    import java.sql.SQLException;  
    import javax.sql.DataSource;  
    import org.apache.commons.dbcp.BasicDataSource;  
      
    public class DBCPDataSource {  
    private static BasicDataSource dataSource=null;  
    private static final String driver="com.mysql.jdbc.Driver";  
    private static final String url="jdbc:mysql://localhost:3306/wyd";  
    private static final String userName="root";  
    private static final String password="root";  
      
    public static DataSource getDataSource(){  
    if(dataSource==null){  
    dataSource=new BasicDataSource();  
    dataSource.setDriverClassName(driver);  
    dataSource.setUrl(url);  
    dataSource.setUsername(userName);  
    dataSource.setPassword(password);  
    }  
    return dataSource;  
    }  
      
    public static Connection getConnection() throws SQLException{  
    return DBCPDataSource.getDataSource().getConnection();  
    }   
    }  


    (2) C3PO 连接池 
    C3PO 连接池是一个优秀的连接池,推荐使用。C3PO实现了JDBC3.0规范的部分功能,因而性能更加突出。 

    需要的jar包: c3po0.902.jar 

    package wyd.spring.datasource.c3po;  
    
    import java.beans.PropertyVetoException;  
    import java.sql.Connection;  
    import java.sql.SQLException;  
    import javax.sql.DataSource;  
    import wyd.spring.datasource.dbcp.DBCPDataSource;  
    import com.mchange.v2.c3p0.ComboPooledDataSource;  
      
    public class C3PODataSource {  
    private static ComboPooledDataSource dataSource=null;  
    private static final String driver="com.mysql.jdbc.Driver";  
    private static final String url="jdbc:mysql://localhost:3306/wyd";  
    private static final String userName="root";  
    private static final String password="root";  
      
    public static DataSource getDataSource(){  
    if(dataSource==null){  
    dataSource=new ComboPooledDataSource();  
    try {  
    dataSource.setDriverClass(driver);  
    } catch (PropertyVetoException e) {  
    System.out.println("DataSource Load Driver Exception!!");  
    e.printStackTrace();  
    }  
    dataSource.setJdbcUrl(url);  
    dataSource.setUser(userName);  
    dataSource.setPassword(password);  
    //设置连接池最大连接容量  
    dataSource.setMaxPoolSize(20);  
    //设置连接池最小连接容量  
    dataSource.setMinPoolSize(2);  
    //设置连接池最大statements对象容量  
    dataSource.setMaxStatements(100);  
    }  
    return dataSource;  
    }  
      
    public static Connection getConnection() throws SQLException{  
    return DBCPDataSource.getDataSource().getConnection();  
    }   
    }  
    


    3)SmartDataSource 连接池 
    SmartDataSource 继承DataSource接口。让除了提供DataSource的基本方法之外,还提供一个额外的功能,在恰当的时候关闭连接。也就是说,通过SmartDataSource获得的连接是无须关闭连接的。 
    当程序中需要不断重用某个连接的时候,SmartDataSource对提高非常有用。SmartDataSource判断数据库是否需要关闭,通过如下方法体现。 
    boolean shouldClose(Connection con) 
    该方法由smartDataSource的实现类提供实现。当该方法返回true时,SmartDataSource实例子在该方法返回true时关闭连接。 
    SmartDataSource 接口的一个实现类是: SingleConnectionDataSource 类 
    它是单连接的DataSource,可以认为 MaxPoolSize=1,MinPoolSize=1 
    需要 jar 包: spring-jdbc.jar 
    spring-beans.jar 
    spring-dao.jar 
    spring-core.jar 
    commons-logging.jar 
    package wyd.spring.datasource.smart;  
    
    
    import java.sql.Connection;  
    import java.sql.SQLException;  
    import org.springframework.jdbc.datasource.SingleConnectionDataSource;  
    import org.springframework.jdbc.datasource.SmartDataSource;  
      
    public class SCDataSource {  
    private static SingleConnectionDataSource datasource=null;  
    private static final String driver="com.mysql.jdbc.Driver";  
    private static final String url="jdbc:mysql://localhost:3306/ws";  
    private static final String userName="root";  
    private static final String password="root";  
      
    public static SmartDataSource getDataSource(){  
    if(datasource==null){  
    datasource=new SingleConnectionDataSource();  
    datasource.setDriverClassName(driver);  
    datasource.setUrl(url);  
    datasource.setUsername(userName);  
    datasource.setPassword(password);  
    datasource.setSuppressClose(false);  
    }  
    return datasource;  
    }  
      
    public static Connection getConnection() throws SQLException{  
    return SCDataSource.getDataSource().getConnection();  
    }  
    }  

    展开全文
  • -- 指定Hibernate配置文件的DTD信息 --> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" ...
    <!-- 指定Hibernate配置文件的DTD信息 -->
    <!DOCTYPE hibernate-configuration PUBLIC
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <!-- hibernate- configuration是连接配置文件的根元素 -->
    <hibernate-configuration>
     <session-factory>
      <!-- 指定连接数据库所用的驱动 -->
      <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
      <!-- 指定连接数据库的url,hibernate连接的数据库名 -->
      <property name="connection.url">jdbc:mysql://localhost/slim</property>
      <property name="connection.useUnicode">true</property>
      <property name="connection.characterEncoding">gbk</property>
      <!-- 指定连接数据库的用户名 -->
      <property name="connection.username">root</property>
      <!-- 指定连接数据库的密码 -->
      <property name="connection.password">gyfbao</property>
      <!-- C3P0连接池设定-->
      <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
      <!-- 指定连接池里最大连接数 -->
      <property name="hibernate.c3p0.max_size">20</property>
      <!-- 指定连接池里最小连接数 -->
      <property name="hibernate.c3p0.min_size">1</property>
      <!-- 指定连接池里连接的超时时长 -->
      <property name="hibernate.c3p0.timeout">1800</property>
      <!-- 指定连接池里最大缓存多少个Statement对象 -->
      <property name="hibernate.c3p0.max_statements">100</property>
      <property name="hibernate.c3p0.idle_test_period">500</property>
      <property name="hibernate.c3p0.acquire_increment">2</property>
      <property name="hibernate.c3p0.validate">true</property>
      <property name="hibernate.c3p0.preferredTestQuery ">select 1 </property>
            <property name="hibernate.c3p0.idleConnectionTestPeriod ">18000</property>            
            <property name="hibernate.c3p0.maxIdleTime">25000</property>         
            <property name="hibernate.c3p0.testConnectionOnCheckout">true</property>
      
      <!-- 指定数据库方言 -->
      <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
      <!-- 根据需要自动创建数据库 -->
      <property name="hbm2ddl.auto">update</property>
      <!-- 显示Hibernate持久化操作所生成的SQL -->
            <property name="show_sql">true</property>
      <!-- 将SQL脚本进行格式化后再输出--> 
            <property name="hibernate.format_sql">true</property>
      <!-- 罗列所有的映射文件
      <mapping resource="User.hbm.xml"/>
      <mapping resource="Area.hbm.xml"/>
      <mapping resource="Training.hbm.xml"/>
      <mapping resource="School.hbm.xml"/>
      <mapping resource="Figure.hbm.xml"/>
      <mapping resource="Jobs.hbm.xml"/>
      <mapping resource="Trabuy.hbm.xml"/>
      <mapping resource="Schbuy.hbm.xml"/>
      <mapping resource="Schfigure.hbm.xml"/>
      <mapping resource="Profession.hbm.xml"/>
      <mapping resource="Course.hbm.xml"/>
      <mapping resource="Library.hbm.xml"/>
      <mapping resource="MainCategories.hbm.xml"/>
      <mapping resource="SecondaryCategories.hbm.xml"/>--> 
      <mapping resource="News.hbm.xml"/>
      <mapping resource="NewContent.hbm.xml"/>
      <mapping resource="Ask.hbm.xml"/>
      <mapping resource="Answer.hbm.xml"/>
      <mapping resource="About.hbm.xml"/> 
      <mapping resource="Item.hbm.xml"/> 
     </session-factory>
    </hibernate-configuration>

    转载于:https://www.cnblogs.com/jokerpan/p/3557739.html

    展开全文
  • Hibernate连接配置时需要注意的有三点: 一、Apche的DBCP在Hibernate2中受支持,但在Hibernate3中已经不再推荐使用,官方的解释是这个连接池存在缺陷。如果你因为某种原因需要在Hibernate3中使用DBCP,建议采用...
      
    

    Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP。在Hibernate连接池配置时需要注意的有三点:

    一、Apche的DBCP在Hibernate2中受支持,但在Hibernate3中已经不再推荐使用,官方的解释是这个连接池存在缺陷。如果你因为某种原因需要在Hibernate3中使用DBCP,建议采用JNDI方式。

    二、默认情况下(即没有配置连接池的情况下),Hibernate会采用内建的连接池。但这个连接池性能不佳,且存在诸多BUG(笔者就曾在Mysql环境下被八小时连接悬空问题困扰过),因此官方也只是建议仅在开发环境下使用。

    三、Hibernate2和Hibernate3的命名空间有所变化。例如,配置C3P0时的provider_class有Hibernate2环境下使用net.sf.hibernate.connection.C3P0ConnectionProvider,在Hibernate3环境下使用org.hibernate.connection.C3P0ConnectionProvider。

    下面是Hibernate环境下几种常见的连接池配置:

    1.默认Hibernate连接池配置

     
    1. <?xml version='1.0' encoding='UTF-8'?>    
    2. <!DOCTYPE hibernate-configuration     
    3. PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"     
    4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">    
    5. <hibernate-configuration>    
    6. <session-factory >    
    7. <!—JDBC驱动程序-->    
    8. <property name="connection.driver_class">com.mysql.jdbc.Driver</property>    
    9. <!-- 连接数据库的URL-->    
    10. <property name="connection.url">      
    11. jdbc:mysql://localhost:3306/schoolproject     
    12. </property>    
    13. <property name="connection.useUnicode">true</property>    
    14. <property name="connection.characterEncoding">UTF-8</property>    
    15. <!--连接的登录名-->    
    16. <property name="connection.username">root</property>    
    17. <!—登录密码-->    
    18. <property name="connection.password"></property>    
    19. <!--是否将运行期生成的SQL输出到日志以供调试-->    
    20. <property name="show_sql">true</property>    
    21. <!--指定连接的语言-->    
    22. <property name="dialect">org.hibernate.dialect.MySQLDialect</property>    
    23. <!--映射Student这个资源-->    
    24. <mapping resource="com/wqbi/model/pojo/student.hbm.xml" />    
    25. </session-factory>      
    26. </hibernate-configuration>    

     2.C3P0的Hibernate连接池配置

     
    1. <?xml version='1.0' encoding='UTF-8'?>    
    2. <!DOCTYPE hibernate-configuration     
    3. PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"     
    4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">    
    5. <hibernate-configuration>    
    6. <session-factory >    
    7. <!—JDBC驱动程序-->    
    8. <property name="connection.driver_class">com.mysql.jdbc.Driver</property>    
    9. <!-- 连接数据库的URL-->    
    10. <property name="connection.url">      
    11. jdbc:mysql://localhost:3306/schoolproject     
    12. </property>    
    13. <property name="connection.useUnicode">true</property>    
    14. <property name="connection.characterEncoding">UTF-8</property>    
    15. <!--连接的登录名-->    
    16. <property name="connection.username">root</property>    
    17. <!--登录密码-->    
    18. <property name="connection.password"></property>    
    19.       
    20. <!-- C3P0连接池设定-->    
    21. <p    
    22. <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider     
    23. </property>    
    24. <property name="hibernate.c3p0.max_size">20</property>    
    25. <property name="hibernate.c3p0.min_size">5</property>    
    26. <property name="hibernate.c3p0.timeout">120</property>    
    27. <property name="hibernate.c3p0.max_statements">100</property>    
    28. <property name="hibernate.c3p0.idle_test_period">120</property>    
    29. <property name="hibernate.c3p0.acquire_increment">2</property>    
    30. <!--是否将运行期生成的SQL输出到日志以供调试-->    
    31. <property name="show_sql">true</property>    
    32. <!--指定连接的语言-->    
    33. <property name="dialect">org.hibernate.dialect.MySQLDialect</property>    
    34. <!--映射Student这个资源-->    
    35. <mapping resource="com/wqbi/model/pojo/student.hbm.xml" />    
    36. </session-factory>      
    37. </hibernate-configuration>    
     
    1. <?xml version="1.0" encoding="UTF-8"?>      
    2. <!-- the proxool configuration can be embedded within your own application's.      
    3. Anything outside the "proxool" tag is ignored. -->      
    4. <something-else-entirely>    
    5. <proxool>    
    6. <!--连接池的别名-->    
    7. <alias>DBPool</alias>    
    8. <!--proxool只能管理由自己产生的连接-->    
    9. <driver-url>    
    10. jdbc:mysql://localhost:3306/schoolproject?useUnicode=true&characterEncoding=UTF8    
    11. </driver-url>    
    12. <!—JDBC驱动程序-->    
    13. <driver-class>com.mysql.jdbc.Driver</driver-class>    
    14. <driver-properties>    
    15. <property name="user" value="root"/>    
    16. <property name="password" value=""/>    
    17. </driver-properties>      
    18. <!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回     
    19. 收,超时的销毁-->      
    20. <house-keeping-sleep-time>90000</house-keeping-sleep-time>    
    21. <!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的     
    22. 用户连接就不会被接受-->      
    23. <maximum-new-connections>20</maximum-new-connections>    
    24. <!-- 最少保持的空闲连接数-->      
    25. <prototype-count>5</prototype-count>    
    26. <!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的     
    27. 等待请求数由maximum-new-connections决定-->      
    28. <maximum-connection-count>100</maximum-connection-count>    
    29. <!-- 最小连接数-->    
    30. <minimum-connection-count>10</minimum-connection-count>    
    31. </proxool>      
    32. </something-else-entirely>     

    (2)配置hibernate.cfg.xml文件

     
    1. <?xml version='1.0' encoding='UTF-8'?>    
    2. <!DOCTYPE hibernate-configuration     
    3. PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"     
    4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">    
    5. <hibernate-configuration>    
    6. <session-factory >    
    7. <property name="hibernate.connection.provider_class">    
    8. org.hibernate.connection.ProxoolConnectionProvider     
    9. </property>    
    10. <property name="hibernate.proxool.pool_alias">DBPool</property>    
    11. <property name="hibernate.proxool.xml">proxoolconf.xml</property>    
    12. <!--是否将运行期生成的SQL输出到日志以供调试-->    
    13. <property name="show_sql">true</property>    
    14. <!--指定连接的语言-->    
    15. <property name="dialect">org.hibernate.dialect.MySQLDialect</property>    
    16. <!--映射Student这个资源-->    
    17. <mapping resource="com/wqbi/model/pojo/student.hbm.xml" />    
    18. </session-factory>      
    19. </hibernate-configuration>    

    (1) hibernate.connection.provider_class定义Hibernate的连接加载类,这里Proxool连接池是用这个,不同 的连接池有不同的加载类,可以查阅Hibernate文档获取相关信息

    (2) hibernate.proxool.pool_alias这里就是用我们上面提到的连接池的别名

    (3) hibernate.proxool.xml是向Hibernate声明连接池的配置文件位置,可以用相对或绝对路径,用相对路径时要注意一定在要Path范围内!不然会抛出异常。

    (4) dialect是声明SQL语句的方言

    (5) show_sql定义是否显示Hibernate生成的SQL语言,一般在调试阶段设为true,完成后再改成false,这样有利于调试

    (6) <mapping >资源文件映射

    3.   JNDI方式的Hibernate连接池配置

    数据源已经由应用服务配置好(如Web服务器),Hibernate需要做的只是通过JNDI名查找到此数据源。应用服务器将连接池对外显示为JNDI绑定数据源,它是javax.jdbc.Datasource类的一个实例。只要配置一个Hibernate文件,如:hibernate.properties

     
    1. hibernate.connection.datasource=java:/comp/env/jdbc/schoolproject //JNDI名     
    2. hibernate.transaction.factory_class = org.hibernate.transaction.JTATransactionFactory     
    3. hibernate.transaction.manager_loopup_class =     
    4. org.hibernate.transaction.JBossTransactionManagerLookup     
    5. hibernate.dialect=org.hibernate.dialect.MySQLDialect    

    结论:

    由于在Hibernate3.0中,已经不再支持dbcp了,Hibernate的作者在hibernate.org中,明确指出在实践中发现dbcp有 BUG,在某些种情会产生很多空连接不能释放,所以抛弃了对dbcp的支持。我不知是否在dbcp最新版本中解决了这个问题,我以前在一个访问量不大的项目中用过dbcp,运行了一年多都没出现问题。不过在网上的确也有不少网友指出dbcp在大型的应用中会出现不稳定的情况。所以在真相未经证实的情况下,我觉得对dbcp持慎重的态度。

    至于c3p0,有评论说它的算法不是最优的,而且,我在matrix中,见到有网友做了一个实验,在同一项目中分别用了几个常用的Hibernate连接池配置,然后测试其性能,发现c3p0占用资源比较大,效率也不高。

    所以,基于上述原因,我才花两晚的时间去研究proxool的配置,proxool不少行家推荐使用,而且暂时来说,是负面评价是最少的一个。在三星中也有项目是用proxool的。

    展开全文
  • Hibernate 连接配置

    2015-01-26 17:18:42
    Hibernate自带的连接池性能不高,而且还存在BUG。因此官方推荐使用c3p0或PRoxool连接池。  首先配置Proxool的配置文件,文件名:Proxool.xml(当然,你也可以用资源文件) <!-- the proxool configuration ...
  • hibernate连接配置

    2013-09-25 10:59:52
    Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP。在配置连接池时需要注意的有三点: 一、Apche的DBCP在Hibernate2中受支持,但在Hibernate3中已经不再推荐使用,官方的解释是这个连接池...
  • hibernate连接配置

    2007-11-30 15:14:00
    以下三种连接都是以连接MySQl为例。...useUnicode=true&characterEncoding=GBK root 8888 上面的一段配置,在c3p0和dbcp中,都是必需的,因为hibernate会根据上述的配置来生成connections,再交给c3p0或db
  • 这里介绍Hibernate MySql连接配置,在Hibernate中,可以配置很多种数据库,例如MySql、Sql Server和Oracle,Hibernate MySql连接配置。 本文向大家介绍Hibernate,可能好多人还不了解Hibernate MySql连接配置,...
  • hibernate-configuration&gt; &lt;session-factory name="mySessionFactory"&gt; &lt;property name="hibernate.connection.driver_class"&gt;com.mysql.jdbc.Driver&...
  • Hibernate连接配置方法剖析 Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP。在Hibernate连接配置时需要注意的有三点: 一、Apche的DBCP在Hibernate2中受支持,但在Hibernate3中...
  • Hibernate连接池的配置

    千次阅读 2014-04-10 15:46:17
    1:Hibernate连接池的配置     在这里笔者简单介绍一下Hibernate配置连接池的方式:   方式1:使用Hibernate自带的连接池。   方式2:使用配置文件指定的数据库连接池。   方式3:从容器中获取得到...
  • <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> com.mysql.jdbc.Driver jd
  • 我花了三个晚上的时间,把hibernate与三种常用连接池的配置研究出来,希望对大家有帮助。以下三种连接都是以连接MySQl为例。org.gjt.mm.mysql.Driver jdbc:mysql://localhost:3306/struts?useUnicode=true&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,402
精华内容 16,160
关键字:

hibernate连接数配置