Hibernate ORM框架——连接池相关
生活随笔
收集整理的這篇文章主要介紹了
Hibernate ORM框架——连接池相关
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
課堂筆記
**********c3p0與hibernate的整合使用********* 1.把hibernate下載包里面的optional文件夾下的3個jar包添加到項目a)c3p0 jar文件是c3p0連接池的核心實現b) mchange-commons-java是c3p0依賴包c)hibernate-c3p0是hibernate整合c3p0使用的一個jar包連接池是可以脫離hibernate單獨使用的。其它不用hibernate框架的項目要使用c3p0連接池,只需要c3p0與mchange-commons兩個jar包即可單獨使用c3p0的時候,一般把相關的配置放置在c3p0.properties文件中或其它名字的配置文件中,配置文件中,一般會有2個層面的配置一個層面是jdbc 鏈接相關的配置,比如驅動,url,用戶名,密碼等另一個層面的配置就是連接池的相關配置,比如minPoolsize,maxpoolsize等hibernate整合c3p0使用時,只需要在hibernate.cfg.xml配置文件配置c3p0開頭的一些連接池設置就可以了,hibernate使用c3p0的邏輯是a)看到hibernate.cfg.xml文件中有c3p0的相關配置,hibernate知道需要使用c3p0連接池了b)在classpath下查看是否有c3p0相關的jar包c)找到后,加載相關類,得到相關的ConnectionProviderd) 依據ConnectionProvider就可以得到相關的池化了的Jdbc Connection對象在hibernate整合c3p0使用時,只需要配置即可,平時的操作與沒有使用c3p0的用法是一樣的hibernate的session對象會自動關聯c3p0提供的已經池化的Connection對象?
?
?
連接池(HibernateStudy_connectionpool項目):
一、需要在lib文件夾里,再導入c3p0-0.9.5.2.jar、hibernate-c3p0-5.2.10.Final.jar、mchange-commons-java-0.2.11.jar,以及MySql的驅動sqljdbc42.jar
二、連接池代碼
(1)配置文件
<?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><!-- MySQL數據庫連接配置 --><property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property><property name="connection.url">jdbc:sqlserver://localhost:1433;databaseName=demo</property><property name="connection.username">sa</property><property name="connection.password"></property><property name="dialect">org.hibernate.dialect.SQLServer2008Dialect</property><!-- 配相關的c3p0的關鍵詞 --><property name="c3p0.minPoolSize">4</property><!-- 設定讓hibernate幫我們自動創建表,不設定可以嗎? --> <!-- <property name="hbm2ddl.auto">create</property> --><property name="show_sql">true</property><property name="format_sql">true</property><mapping resource="shuang/m2m/ClassInfo_m2m.xml"/></session-factory></hibernate-configuration>(2)
實體類
public class ClassInfo {private String cid ;private String name; }實體映射文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="shuang.m2m"><class name="ClassInfo" table="CLASSINFO"><id name="cid" column="cid"><generator class="assigned"></generator></id><property name="name" ></property></class> </hibernate-mapping>(3)Main測試方法
package com.nf;import java.sql.Connection; import java.sql.SQLException; import java.util.HashSet; import java.util.List; import java.util.Set;import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.boot.MetadataSources; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.jdbc.Work;import util.HibernateUtil;public class Main {public static void main(String[] args) {SessionFactory sf = HibernateUtil.getSessionFactory();Session s = sf.openSession();s.doWork(new Work(){//接口 @Overridepublic void execute(Connection connection) throws SQLException {System.out.println(connection.getClass().getName());//測試是否連接c3p0池,成功//成功,則顯示com.mchange.v2.c3p0.impl.NewProxyConnection }});s.close();sf.close();} }?
優化以上代碼:
在導入相應的jar包后,刪掉配置文件,改成c3p0.properties文件:
(1)c3p0.properties文件
c3p0.driverClass=com.microsoft.sqlserver.jdbc.SQLServerDriver c3p0.jdbcUrl=jdbc:sqlserver://localhost:1433;databaseName=demo c3p0.user=sa c3p0.password=(2)Main測試
package c3p0pool;import java.beans.PropertyVetoException; import java.sql.Connection;import com.mchange.v2.c3p0.ComboPooledDataSource;public class Main {public static void main(String[] args) throws Exception { /* ComboPooledDataSource cpds = new ComboPooledDataSource();cpds.setDriverClass( "com.microsoft.sqlserver.jdbc.SQLServerDriver" ); //loads the jdbc driver cpds.setJdbcUrl( "jdbc:sqlserver://localhost:1433;databaseName=demo" );cpds.setUser("sa"); cpds.setPassword(""); */ ComboPooledDataSource cpds = new ComboPooledDataSource();Connection conn = cpds.getConnection();System.out.println(conn.getClass().getName());conn.close();}}?
?
?
關于連接池的案例說明
(1)水池
package pooldemo;import java.util.ArrayList; import java.util.List;public class WaterPool {private List<Water> allWaters;public WaterPool(){allWaters = new ArrayList<Water>();allWaters.add(new Water());allWaters.add(new Water());allWaters.add(new Water());}public Water getWater(){Water w = null;if(allWaters.size() >0 ){w= allWaters.remove(0);w.setPool(this);}return w;}public void returnWater(Water w){allWaters.add(w);}public int haiShengXiaDe(){return allWaters.size();} }?
(2)水
package pooldemo;public class Water {private WaterPool pool;//多對一public void setPool(WaterPool pool) {this.pool = pool;}public void close() {//放回水池里pool.returnWater(this);} }?
(3)Main測試
package pooldemo;public class PoolTest {public static void main(String[] args) {WaterPool pool = new WaterPool();System.out.println("最開始--" + pool.haiShengXiaDe());Water w = pool.getWater();System.out.println("拿走一個之后--"+ pool.haiShengXiaDe());pool.returnWater(w);// w.close();System.out.println("調用w的close之后"+pool.haiShengXiaDe());}}?
?
?
/*以上個人整理筆記,如果有誤或者有不懂的地方,歡迎評論與指出*/
轉載于:https://www.cnblogs.com/Sunny-lby/p/7396550.html
總結
以上是生活随笔為你收集整理的Hibernate ORM框架——连接池相关的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL空密码用户清理
- 下一篇: Java开发中JDBC连接数据库代码和步