Hibernate ORM架構——串連池相關

來源:互聯網
上載者:User

標籤:info   logs   res   使用者   dia   and   實體映射   整合   driver   

課堂筆記

**********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)找到後,載入相關類,得到相關的ConnectionProvider    d)    依據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(){//介面            @Override            public 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.SQLServerDriverc3p0.jdbcUrl=jdbc:sqlserver://localhost:1433;databaseName=democ3p0.user=sac3p0.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());    }}

 

 

 

/*以上個人整理筆記,如果有誤或者有不懂的地方,歡迎評論與指出*/

Hibernate ORM架構——串連池相關

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.