2022-08-20 第八组 卢睿 学习心得

数据库连接池

connection是一种稀有资源,一个连接建立就创造了一个资源

jdbc使用数据库连接池的必要性

在使用基于web程序的数据库连接

  1. 在主程序中建立连接
  2. 执行SQL
  3. 断开连接

所有的jdbc连接通过DriverManager.getConnection
用完的连接不要被垃圾回收,能够重复使用

池化思想

每次去初始化一个连接池,连接池中会有很多个连接等待被使用
使用完连接之后,不需要关闭连接,只需要把连接还回到连接池
还回到连接池的操作不需要我们手动控制

设置一些属性,最大等待时间

比较常见的数据库连接池

  1. C3P0:2代数据库连接池,太老了
  2. DBCP:2代数据库连接池,太老了
  3. Druid(德鲁伊)数据库连接池,最好用的连接池
    整合了C3P0和DBCP各自的优点
    加入了日志监控,可以监控SQL语句的执行情况
  4. Hikari(光),目前最快的连接池,spring boot默认的连接池

必须有对应的属性文件
.properties
约定>配置>编码

德鲁伊数据库连接池

import org.junit.Test;

import java.io.IOException;
import java.util.Properties;

public class Ch01 {

    @Test
    public void test01() throws IOException, SQLException {
        Properties properties = new Properties();
        properties.load(Ch01.class.getClassLoader().getResourceAsStream("druid.properties"));

        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.configFromPropety(properties);

        System.out.println(druidDataSource.getConnection());
        System.out.println(druidDataSource.getCreateCount());
    }
}

配置文件

druid.url=jdbc:mysql://127.0.0.1:3306/jsoft?useUnicode=true&characterEncoding=utf8
druid.username=root
druid.password=123456
druid.driverName=com.mysql.jdbc.Driver

druid.initialSize=10
druid.maxActive=20
druid.maxWait=20

hikari数据库连接池


import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.junit.Test;

import java.io.IOException;
import java.sql.SQLException;
import java.util.Properties;

public class Ch02 {

    @Test
    public void test01() throws IOException, SQLException {
        Properties properties = new Properties();
        properties.load(Ch01.class.getClassLoader().getResourceAsStream("hikari.properties"));

        HikariConfig hikariConfig = new HikariConfig(properties);
        HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig);

        System.out.println(hikariDataSource.getConnection());
    }
}

配置文件

jdbcUrl=jdbc:mysql://127.0.0.1:3306/jsoft?useUnicode=true&characterEncoding=utf8
username=root
password=123456
driverClassName=com.mysql.jdbc.Driver

获取连接

import com.jsoft.util.BaseDao;
import org.junit.Test;

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

public class Ch03 {

    @Test
    public void test01() {
        try {
            Connection connection = BaseDao.DATA_SOURCE.getConnection();

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

}

DBUtils

需要引入一个jar包


import com.jsoft.morning.demo2.Teacher;
import com.jsoft.util.BaseDao;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.junit.Test;

import java.sql.SQLException;
import java.util.List;

public class Ch01 {

    @Test
    public void test03() throws SQLException {

        QueryRunner runner = new QueryRunner(BaseDao.DATA_SOURCE);
        int i = runner.update("update teacher set name = ? where id = ?", "mmm", 6);
        System.out.println(i);

    }

    /**
     * 查询一个记录
     */
    @Test
    public void test02() throws SQLException {
        QueryRunner runner = new QueryRunner(BaseDao.DATA_SOURCE);
        Teacher teacher = runner.query("select * from teacher where id = ?", new BeanHandler<>(Teacher.class), 1);
        System.out.println(teacher);
    }

    /**
     * 查询多个记录
     * @throws SQLException
     */
    @Test
    public void test01() throws SQLException {
        // 要使用DBUtils使用的是一个类
        // 传入的是一个数据源DataSource,不是一个Connection
        QueryRunner runner = new QueryRunner(BaseDao.DATA_SOURCE);
        // 查询多个记录
        List<Teacher> teachers = runner.query("select * from teacher", new BeanListHandler<>(Teacher.class));
        System.out.println(teachers);
    }

}

posted @ 2022-08-22 21:10  LegendR  阅读(42)  评论(0)    收藏  举报