数据库的连接池的原理与Hibernate的内置连接池及C3P0的配置

数据库连接池的原理:

在未使用DB连接池时,通过数据库连接对象Connection连接DB的。

这种方式的缺点是,当本次连接使用完毕后,就需要将该连接删除。

连接对象的创建需要通过网络与运程的数据库服务器DBserver 进行连接,连接对象的删除,也需要解除与远程的连接,将占有的资源释放。

这两处过程都是很消耗系统时间与系统资源的。当下一个访问数据库的请求到达时,需要再次创建连接,删除连接。

为了使DB连接做到复用,专门建立了一个数据结构,用于存放创建好的DB连接对象。这个数据结构为连接库连接池 DB Pool

当需要DB连接对象时,首先查找连接池。若存在可用的连接,则直接使用该连接对象即可。

使用完毕,不需要释放资源。而是将其再次放入到连接池中,以备其他请求使用,这样就大大提高了访问的DB的效率。

hibernate的内置连接池:

在hibernate.cfg.xml文件中

假如没有配置连接池,会自动使用hibernate自带的连接池,但在做项目,不要使用

如不指定第三方数据源,将使用hibernate内置的数据源,该数据源无法自动将数据库连接Connection释放,而数据源作为SessionFactory的属性,一直被当前程序占用,

导致SessionFactory在程序运行结束后无法自动关闭,而将导致整个程序无法结束,

其表现为Eclipse 的Terminate按钮一直显示为红色运行状态。

常用的连接池apache的ddcd 与  C3P0


连接池所需要配置参数有:
除了需要配置DB连接四要素外,

根据业务的需要,还可以配置连接池的
初始连接数,最小连接数,最多连接数,每次扩展连接数,连接的最长空闲时间等。
不同的数据连接池,其属性名称不相同。可能直接在百度搜索相关配置即可


C3P0的连接池配置;


在hibernate.cfg.xml文件中编辑:

<hibernate-configuration>
<session-factory>
DB连接四要素
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://192.168.40.115:3306/test</property>
<property name="hibernate.connection.username">Leizedeng</property>
<property name="hibernate.connection.password">123456</property>

指定方言,在hibernate-core-5.0.0.Final.jar中的dialect结尾的--》MYSQL5Dialect的全名路径
<property name="hibernate.dialect">MYSQL5Dialect的全名</property>

数据源:数据库连接池C3P0  连接配置
    假如没有配置连接池,会使用hibernate自带的连接池,但在做项目,不要使用
    <property name="(连接提供者)hibernate.connection.provider_class">
hibernate-c3p0.Final.jar中找C3p0ConnectionProvide的全名路径
</property>


上下文
<property name="hibernate.current_session_context_class">
thread(可以保证在同一线程可以获取到的是同一个session)
</property>

<property name="hibernate.current_session_context_class">
jta(以后做分布式系统用的,不用管)
</property>

<property name="hibernate.current_session_context_class">
spring(以后整合时用的,不用管)
</property>

自动建表              ddl(创建) dml(操作语言)dql(查询语言)
<property name="hibernate.hbm2ddl.auto">
create(每运行一次,把旧表删除,建新表)或者update(没有表,就建一个,有表的话,就会更新数据,一使用)
</property>
调试的时候:显示sql:自动把api封装的转换成sql显示出来
<property name="hibernate.show_sql">
true
</property>
显示sql的时候都在一行,不利于查看所以格式化一下
<property name="hibernate.format_sql">
true
</property>

注册映射文件
<mapping resource="映射文件的hbm.xml的路径"/>
</session-factory>
</hibernate-configuration>


没有更多推荐了,返回首页