数据库连接池

数据库连接池

1.概念: 一个容器(集合), 存放数据库连接的容器

当系统初始化好后, 容器被创建, 容器中会申请一些连接对象, 当用户来访问数据库时, 从容器中获取连接对象, 用户访问完成之后, 会将连接对象归还给容器

2. 好处:

  • 节约资源
  • 用户访问高效

3. 实现:

  1. 标准接口 - DataSource -> java.sql 包
    1. 方法:
      • 获取连接 -> getConnection()
      • 归还连接 -> Connection.close() - 接对象是从连接池中获取,那么调用close()方法不会关闭连接,而是归还连接
    2. 由数据库厂商实现
      • C3P0 -> 数据库连接池技术
      • Druid -> 由阿里巴巴实现

4.C3P0的使用

  1. 步骤:
    1. 导入jar包(两个) 官网: http://mvnrepository.com/
      • c3p0-x.x.x.jar && mchange-commons-java-x.x.x.jar
      • mysql-connector-java-x.x.x.jar
    2. 定义配置文件:
      • c3p0.properties || c3p0-config.xml
      • 路径: src目录下
    3. 创建核心对象 - 数据库连接池对象 ComboPooledDataSource
    4. 获取连接: getConnection([String name]) - 参数可指定配置名称
<c3p0-config>    
<!-- 使用默认的配置读取连接池对象 -->    
    <default-config>        
    <!-- 连接参数 -->        
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>        
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC</property>        
        <property name="user">root</property>        
        <property name="password">Hhn004460</property>        
        <!-- 连接池参数 -->        
        <!-- 初始化申请连接数量 -->        
        <property name="initialPoolSize">5</property>        
        <!-- 最大连接数量 -->        
        <property name="maxPoolSize">10</property>        
        <!-- 连接超时ms -->        
        <property name="checkoutTimeout">3000</property>    
    </default-config>    
        <!-- 命名配置: 配置多个 -->    
    <named-config name="mysql">        
        <!-- 连接参数 -->        
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>        
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC</property>        
        <property name="user">root</property>        
        <property name="password">Hhn004460</property>        
        <!-- 连接池参数 -->        
        <property name="initialPoolSize">5</property>        
        <property name="maxPoolSize">8</property>        
        <property name="checkoutTimeout">1000</property>    
    </named-config>
</c3p0-config>
public static void main(String[] args) {    
    //使用默认配置    
    DataSource ds = new ComboPooledDataSource();    
    Connection conn = null;    
    //指定名称配置 - 参数    
    DataSource dsMysql = new ComboPooledDataSource("mysql");    
    Connection connMysql = null;    
    //获取11个默认连接对象    
    for (int i = 1; i <= 11; i++) 
    {        
        try {            
            conn = ds.getConnection();            
            System.out.println(i+" : " +conn);            
            //第五次归还连接           
            if (i == 5){                
            conn.close();           
            }        
        } catch (SQLException throwables) {            
            throwables.printStackTrace();        
        }    
    }    
    System.out.println("==========指定名称对象获取==============");    
	//获取9个指定名称连接对象    
	for (int i = 1; i <= 9; i++) {        
		try {            
			connMysql = dsMysql.getConnection();            
            System.out.println(i+" : " +connMysql);            
            //第五次归还连接            
            if (i == 5){                
            connMysql.close();           
            }        
         } catch (SQLException throwables) {            
            throwables.printStackTrace();        
        }    
    }
}

5.Druid的使用

  1. 步骤:
    1. 导入jar包-下载地址:https://github.com/alibaba/druid
      • druid-x.x.x.jar
      • mysql-connector-java-x.x.x.jar
    2. 定义配置文件:
      • properties 文件
      • 任意名称,放置任意目录
    3. 获取数据库连接池对象 -> 工厂类 : DruidDataSourceFactory
    4. 获取连接 -> getConnction();
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC
username=root
password=Hhn004460
# 初始化
filters=statinitialSize=2
maxActive=10
maxWait=3000
timeBetweenEvictionRunsMillis=6000
minEvictableIdle
TimeMillis=30000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=200
public static void main(String[] args) {
    //1.导入jar包 get   
    //2.定义配置文件 get    
    //3.加载配置文件    
    Properties pro = new Properties();    
    InputStream is = DruidTest.class.getClassLoader().getResourceAsStream("druid.properties");          try {        
        pro.load(is);        
        //4.获取连接池对象        
        DataSource ds = DruidDataSourceFactory.createDataSource(pro);        
        //5.获取连接        
        Connection conn = ds.getConnection();        
        System.out.println(conn);    
        } catch (Exception e) {
            e.printStackTrace();    
    }
}
  1. 使用Druid定义工具类:
    1. 定义一个类 JDBCUtils
    2. 提供静态代码块加载配置文件, 初始化连接对象
    3. 提供方法:
      • 获取连接的方法: 通过数据库连接池连接
      • 释放资源
      • 获取连接池的方法

Spring JDBC - JDBC Template

Spring 框架对的JDBC简单封装
提供了JdbcTemplate 对象简化JDBC的开发

  • 步骤:
    1. 导入jar包(5个)
    2. 创建JdbcTemplate对象, 依赖于数据源DataSource
      • JdbcTemplate temlate = new JdbcRemplate(ds);
    3. 调用JjdbcTemplate的方法完成CRUD操作
      • update(); -> 执行DML

      • queryForMap(); -> 查询结果将结果集封装为map集合

        • 查询结果长度只能为1 (key 为字段, value 为 值)
      • queryForList(); -> 查询结果将结果集封装为list集合

        • 将每一条记录封装为Map集合,再将Map集合装载到List集合中
      • query(); -> 查询结果,将结果封装为JavaBean对象

        • 参数 -> RowMapper : 一般使用BeanPropertyRowMapper实现类,完成数据到JavaBean自动封装
      • queryForObject(); -> 查询结果,将结果封装为对象

        • 一般用于聚合函数的查询
  • BeanPropertyRowMapper:
new BeanPropertyRowMapper<类型>(类型.class);
  • JdbcTemplate:
public static void main(String[] args) {
    String sql = "UPDATE account SET balance = 3000 WHERE id = ?";
    //2. 创建JdbcTemplate对象
    JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
    //3.调用方法    i
    nt count = template.update(sql,3);
    System.out.println(count);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值