连接池&mybatis基础

本文详细介绍了数据库连接池的作用和原理,包括C3P0和DRUID连接池的配置与使用。同时,文章讲解了MyBatis框架的基础知识,包括其优点、ORM概念,以及如何配置和使用MyBatis进行数据库操作。通过案例演示,读者可以掌握连接池的配置以及MyBatis的快速入门。
摘要由CSDN通过智能技术生成

《连接池&mybatis入门-笔记》

学习目标

  1. 能够理解连接池解决现状问题的原理
  2. 能够使用C3P0连接池
  3. 能够使用DRUID连接池
  4. 掌握mybatis框架开发快速入门

连接池解决现状问题的原理

目标

  1. 为什么需要连接池
  2. 连接池的执行原理

JDBC访问数据库时操作Connection对象

JDBC访问数据库的每个增删改查的操作都需要先创建连接,而且这个连接对象是不能共享的。每个用户每次访问都必须创建一个连接对象,并且这个连接对象应该设置成局部变量。

在这里插入图片描述

连接对象的使用问题

  1. 经过测试,每次访问数据库最耗时的部分就是创建连接对象。
  2. 每次使用完连接对象以后,就马上关闭。

需要解决两个问题

  1. 如何提高创建连接对象的速度
  2. 如何提高连接对象的使用率

使用连接池的目的就是为了解决以上2个问题

连接池的原理图

没有使用连接池的情况:每个用户访问数据库的时候,都是自己创建连接对象

在这里插入图片描述

使用连接池的情况:一开始系统启动的时候就创建了一定数量的连接对象,使用的时候直接从连接池中去获取就可以了。不需要自己来创建连接对象。

在这里插入图片描述

小结

连接池解决现状问题的原理

Connection连接对象 操作特点
创建时 连接对象不再由自己创建,而是系统启动的时候已经创建一定数量的连接,
并且放在连接池中
使用时 直接从连接池中去获取一个已经创建好的连接对象即可
关闭时 不是真的关闭连接对象,而是将连接对象再放回到连接池中,供下一个用户使用

数据库连接池API

目标

  1. 连接池的接口名
  2. 从连接池中得到连接的方法

数据源接口

javax.sql.DataSource接口

实现类在哪?由第三方厂商来实现,只要实现这个接口都可以编写自己的连接池。

数据源接口中的方法

DataSource接口中的方法 描述
Connection getConnection() 从连接池中获取连接对象

常用连接池参数含义

每个连接池都有很多的参数,几乎所有的参数都是有默认的值的,我们也可以根据实际情况进行调整。参数名在不同的连接池中参数名是有区别的。

常用参数 描述
初始连接数 服务器启动的时候创建的连接对象数量
最大连接数 连接池中最多可以允许放多少个连接对象
最长等待时间 如果连接池中没有连接对象,设置用户等待的最长时间是多久,单位是毫秒。
如果超过这个时间就抛出异常
最长空闲回收时间 如果一个连接对象长时间没有人使用,设置多久回收这个对象,默认是不回收。

小结

  1. 连接池的接口名是什么?

    javax.sql.DataSource

  2. 从连接池中得到连接的方法是什么?

    getConnection()

c3p0连接池的介绍

目标

  1. 认识C3P0连接池
  2. c3p0连接池的配置文件和类

常用连接池的介绍

DataSource本身只是Oracle公司提供的一个接口,没有具体的实现,它的实现由连接池的数据库厂商去实现。我们只需要学习这个工具如何使用即可。

常用的连接池实现组件有这些:

  1. 阿里巴巴-德鲁伊druid连接池:Druid是阿里巴巴开源平台上的一个项目
  2. DBCP(DataBase Connection Pool)数据库连接池,是Apache上的一个Java连接池项目,也是Tomcat使用的连接池组件。
  3. C3P0是一个开源的JDBC连接池,目前使用它的开源项目有Hibernate,Spring等。C3P0有自动回收空闲连接功能。

C3P0常用的配置属性

就算不设置任何参数,每个连接池都有默认的配置参数。不同的数据源实现厂商,下面这些属性名会不同。

常用参数 描述
initialPoolSize 初始连接数,一开始创建多少个连接对象
maxPoolSize 连接池中最大连接数
checkoutTimeout 最长等待时间,等多久没有获取到连接对象,抛出异常
maxIdleTime 最长空闲回收时间,并不是到了这个时间马上回收,看连接池使用情况

配置文件的要求

使用c3p0的配置文件来配置连接池,配置文件有如下几个要求:

  1. 文件名:必须叫c3p0-config.xml
  2. 路径:这个文件必须要放在src目录下,即类路径下
  3. 分成两种配置
    1. 默认配置:在不指定配置名的情况下,默认使用的配置
    2. 命名配置:可以使用多个配置,通过名字来选择使用哪个配置
    3. 多个配置的好处:
      1. 可以使用不同的连接池参数
      2. 可以指定不同的数据库名,如:day20, day21
      3. 可以指定不同厂商的数据库,如:Oracle,MySQL

API的介绍

C3P0中的类

构造方法 描述
ComboPooledDataSource() 默认的构造方法,使用默认的配置来创建连接池
ComboPooledDataSource(命名配置) 指定使用哪个命名配置来创建连接池

小结

  1. c3p0连接池配置文件名是?c3p0-config.xml
  2. 创建数据源的类是?ComboPooledDataSource

案例:使用C3P0创建连接池

需求

  1. 从连接池中得到10个连接对象,输出每个对象
  2. 分别设置默认配置和命名配置

导入的包

在这里插入图片描述

连接同mysql的驱动,复制到lib目录下

在这里插入图片描述

步骤

  1. 导入jar包c3p0-0.9.5.2.jar 和 mchange-commons-java-0.2.12.jar, 如果要连接mysql,还要数据库驱动程序:mysql-connector-java-5.1.37-bin.jar
  2. 配置xml
    1. 在src目录下创建配置文件c3p0-config.xml,配置对应参数
    2. 设置数据库的连接参数:用户名、密码、URL、驱动名
    3. 设置连接池配置参数:初始连接数、最大连接数、最长等待时间
  3. Java代码
    1. 创建数据源的实现类ComboPooledDataSource,使用默认配置或命名配置
    2. 从连接池中得到连接对象

代码

配置文件

<?xml version="1.0" encoding="utf-8"?>
<c3p0-config>
    <!-- 默认配置 -->
    <default-config>
        <!--1. 连接数据库有关的参数,键是固定的,值可以修改 -->
        <!--mysql驱动的名字-->
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <!--连接字符串URL-->
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/day24</property>
        <!--用户名-->
        <property name="user">root</property>
        <!--密码-->
        <property name="password">root</property>

        <!--2. 连接池配置有关的参数-->
        <!--初始连接数-->
        <property name="initialPoolSize">5</property>
        <!--最大连接数-->
        <property name="maxPoolSize">10</property>
        <!--过多久没有获取连接,超时抛出异常-->
        <property name="checkoutTimeout">3000</property>
    </default-config>

    <!--命名配置,可以使用多个-->
    <named-config name="otherc3p0">
        <!--mysql驱动的名字-->
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <!--连接字符串URL,修改了库名 -->
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/day23</property>
        <!--用户名-->
        <property name="user">root</property>
        <!--密码-->
        <property name="password">root</property>

        <!--初始连接数-->
        <property name="initialPoolSize">3</property>
        <!--最大连接数-->
        <property name="maxPoolSize">15</property>
        <!--过多久没有获取连接,超时抛出异常-->
        <property name="checkoutTimeout">2000</property>
    </named-config>
</c3p0-config>

Java代码

package com.itheima;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.sql.Connection;
import java.sql.SQLException;

/**
 * 1. 从连接池中得到10个连接对象,输出每个对象
 * 2. 分别设置默认配置和命名配置
 */
public class Demo1C3p0 {
   

    public static void main(String[] args) throws SQLException {
   
        //1.创建连接池,使用默认配置。ComboPooledDataSource实现了DataSource接口
        //ComboPooledDataSource ds = new ComboPooledDataSource();

        //使用命名配置
        ComboPooledDataSource ds = new ComboPooledDataSource("otherc3p0");
        //2.使用连接池,从连接池中获取10个连接对象
        for (int i = 1; i <= 16; i++) {
   
            Connection connection = ds.getConnection();
            System.out.println("第" + i + "个连
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值