col dtd ddl org div url ngx execute
课堂笔记
- **********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.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());
- }
- }
/* 以上个人整理笔记,如果有误或者有不懂的地方,欢迎评论与指出 */
Hibernate ORM 框架——连接池相关
来源: http://www.bubuko.com/infodetail-2268606.html