课堂笔记

**********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框架——连接池相关相关推荐

  1. Hibernate ORM框架学习日记基础篇-1

    一.简介 Hibernate是轻量级Java EE应用的持久层解决方案,不仅管理Java类库到数据库表的映射,还提供数据查询和获取数据的 方法,它完成对象模型和基于SQL的关系模型的映射关系,使得开发 ...

  2. Hibernate 配置C3P0 连接池

    第一步在hibernate.cfg.xml配置 <!-- 连接池 --><property name="hibernate.connection.provider_clas ...

  3. Hibernate配置C3P0连接池(在配好基本的hibernate配置下使用)

    拷贝jar包 找到我们的hibernate安装包,在lib目录下找到optional目录,打开c3p0文件,拷贝里面的jar包到eclipse里 写一个测试类,代码入下 public class C3 ...

  4. hibernate访问mysql没有响应_Struts2+hibernate + mysql C3P0连接池 导致写数据库无反应(死机)...

    我学hibernate刚学不久,最近用s2h+mysql做了个网站,买了个jsp的空间,发布到空间去了之后,第二天访问却访问不了,一查才知道,hiberante默认的连接数据库的时间有个限度,如果在这 ...

  5. go-redis连接池相关参数MaxIdle、IdleTimeout、MaxActive

    go-redis中连接池以及相关参数使用笔记 参数说明: MaxIdle: 最大空闲连接数:没有redis操作时依然可以保持这个连接数量,但要在IdleTimeout的时间范围内,不然就会关闭,结合I ...

  6. 数据层优化-jdbc连接池简述、druid简介

    终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和dao层的优化 ...

  7. 连接池:别让连接池帮了倒忙

    今天,我再与你说说另一种很重要的池化技术,即连接池. 我先和你说说连接池的结构.连接池一般对外提供获得连接.归还连接的接口给客户端使用,并暴露最小空闲连接数.最大连接数等可配置参数,在内部则实现连接建 ...

  8. hikariCP连接池+oracle/sqlserver

    最近在维护程序,在并发较大的情况下,会出现死锁的情况,后经发现程序还在使用c3p0,网帖一搜,都在怒赞hikariCP,果断上车.         程序使用了oracle和sqlserver,以下贴上 ...

  9. Sql Server 连接池

    在看缓存的一篇文章中,看到连接池的三个字,来充充电. 原文连接 这篇讲了关键字 其实我们一直在使用SqlServer的连接池.在连接字符串中,Pooling为是否启用连接池,默认值为true,表示启用 ...

最新文章

  1. Java中 与,||与|的区别
  2. 用Python分析了1w场吃鸡数据,原来吃鸡要这么玩!
  3. GContracts1.1.0支持前置/后置条件的继承
  4. 数据库视频总结一(概述)
  5. 旅游网站的主页代码_山西太原网站SEO优化推广联系电话
  6. GDC2016 【巫师3 狂猎】的游戏事件工作流
  7. python \__call__
  8. 哪个员工上班健身,定性考勤造假;哪个员工反映问题,考虑把他清退!华为HR实名内曝...
  9. VC2008学习笔记
  10. arma模型预测 matlab,MATLAB中ARMA模型预测差分问题
  11. 手机浏览器和pc浏览器下载文件方法
  12. STM32CubeMonitor使用教程
  13. 【2022 年第十二届 MathorCup杯数学建模】D 题 移动通信网络站址规划和区域聚类问题 赛后总结、论文及代码
  14. ffmpeg生成透明背景视频
  15. python实现两个图片的叠加融合
  16. 腾讯云手游安全MTP怎么样?腾讯云手游安全MTP值得入手吗?
  17. iphone获取手机设备号
  18. ERP/MIS系统中集成命令行式的功能调用
  19. 计算机专业笔记本用i5还是i7,笔记本电脑i5和i7的区别大么?
  20. 我的一些杭电计算机考研资料

热门文章

  1. Kubernetes监控之Heapster源码分析
  2. 254. Factor Combinations
  3. 总结运行SSIS包的几种方式
  4. 12.5K 颗星星的 C++ 教程,带你高速上手现代 C++ !
  5. 一份C++学习资源整理,咬牙切齿地好用。
  6. html中怎样调用xml,HTML中调用XML数据实例
  7. pdf怎么查看坐标 python_如何从PDF文件中提取文本和文本坐标?
  8. DOCKER OVERLAY2占用大量磁盘空间解决办法
  9. QuorumPeerMain.runFromConfig
  10. 为什么任何对象都可以实现锁