数据库连接池和JDBCTemplate的使用

1,130 阅读2分钟

一. 数据库连接池

1. 概念

  • 实质上就是存放数据库连接对象Connection的容器
  • 在应用程序启动时,容器被创建并申请一些连接对象Connection,当用户访问数据库时,从容器中获取连接对象;当用户访问结束后,将连接对象归还给容器,以达到连接对象的复用,提高效率。

2. 实现

  • 由数据库厂商实现接口DataSource
    1. C3P0:数据库连接池技术
    2. Druid:数据库连接池技术,阿里巴巴提供

3. 获取/归还连接

  1. 获取连接:dataSource.getConnection()
  2. 归还连接:connection.close()

4. C3P0的使用

  1. 导入jar包
    • c3p0-0.9.5.2.jarmchange-commons-java-0.2.12.jar和数据库驱动jar包mysql-connector-java-5.1.37-bin.jar
  2. 定义数据库连接池相关的配置文件(详情略)
    • 名称:c3p0.properties 或者 c3p0-config.xml
    • 路径:放在src目录下
  3. 创建数据库连接池对象
    • DataSource ds = new ComboPooledDataSource();
  4. 获取连接对象
    • Connection conn = ds.getConnection();

5. Druid的使用

  1. 步骤
    1. 导入jar包
      • druid-1.0.9.jar
    2. 定义properties类型的配置文件,可放置于任意目录下
    3. 加载配置文件
    4. 通过工厂获取数据库连接池对象
    5. 获取连接对象
  2. 代码
    try {
        Properties pro = new Properties();
        InputStream is = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");
        if (is != null) {
            pro.load(is);
        }
        ds = DruidDataSourceFactory.createDataSource(pro);
    } catch (Exception e) {
        e.printStackTrace();
    }
    

二:JDBCTemplate

  1. 导入5个相关的jar包
  2. 创建JdbcTemplate对象。依赖于数据源DataSource
    • JdbcTemplate template = new JdbcTemplate(ds);
  3. 调用JdbcTemplate的方法来完成CRUD的操作
    • update():执行DML语句
    • queryForMap():将查询结果集封装为一个map集合,列名作为key,值作为value
      • 注意:这个方法查询的结果集长度只能是1
    • queryForList():将查询结果集封装为list集合
      • 注意:List<Map<String, Object>>:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
    • query():将查询结果封装为JavaBean对象
      • 参数:sql语句,new BeanPropertyRowMapper<类型>(类型.class)
      • 使用BeanPropertyRowMapper实现类,可以完成数据到JavaBean的自动封装
      • 查询所有记录,将其封装为Emp对象的List集合,示例代码:
        String sql = "select * from emp";
        List<Emp> list = template.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));
        for (Emp emp : list) {
            System.out.println(emp);
        }
        
    • queryForObject():将查询结果封装为对象
      • 参数:sql语句,对象类型.class
      • 一般用于聚合函数的查询