zoukankan      html  css  js  c++  java
  • 数据库连接池

    数据库连接池

    一个用来存放数据库连接的容器。当被创建时,容器初始化,创建连接对象。

    当用户需要访问数据库是,从容器中获取连接对象,在访问完毕以后,归还连接对象到连接池中。

    使用数据库连接池的好处是:节约资源,用户访问更加高效。

    DataSource

    该接口为数据库连接池应该实现的标准接口

    getConnection 从连接池获取连接,返回一个Connection对象

    当对该方法返回的Connection对象调用close方法是,并不是销毁该连接,而是将该连接归还到数据库连接池中。

    常用连接池实现

    常用连接池实现有两个:

    1. C3P0

    2. Druid 阿里巴巴连接池

    使用步骤为,

    1. 导入jar包

    2. 定义配置文件

    3. 创建核心对象 数据库连接池对象

    其中C3P0和Druid的使用存在有微小的差别,C3P0使用xml作为配置文件。而Druid则使用.properties做为配置文件。

    同时,Druid创建数据库连接池时,当需要应用不同配置时,

    DataSource dataSource = DruidDataSourceFactory.createDataSource(profile);
    

    应该提供加载了不同配置文件的Properties对象。

    而在C3P0中,如果需要应用不同的配置

    ComboPooledDataSource pollDataSource = new ComboPooledDataSource("student");
    

    只需要标识指定不同的配置的name属性值就可以了,不过不提供的话,那么将使用默认配置。

    还有一点区别就是在申请超过最大连接数的连接时,C3P0会阻塞到有空闲的连接,而Druid会抛出异常。

    Spring JDBC

    使用Spring JDBC以后,就不需要再手动申请释放Statement。

    使用步骤:

    1. 导入jar包

    2. 创建JdbcTemplated对象,依赖于数据源DataSource

    3. 调用JdbcTemplate的方法完成crud操作

    如:

    JdbcTemplate jdbcTemplate = new JdbcTemplate(DruidUtil.getDataSource());
    
    String sql = "update test set manay=? where name=?";
    System.out.println(jdbcTemplate.update(sql, 200, "张三"));
    

    常用方法

    1. update 执行所有DML语句,返回int值标志影响的函数

    2. queryForMap 将查询的记录封装为Map。既然是封装为Map也就意味着该方法只适合单条记录的情况

    3. queryForList 封装为List

    4. query 封装为为javaBean对象 第二个参数需要传递一个RowMapper接口实现类,他需要实现一个mapRow方法来封装数据。

      或者使用BeanPropertyRowMapper的构造方法来创建一个mRowMapper接口实现对象,它需要提供一个类的class。

      在接受到数据以后,它将自动封装。

      如:

      JdbcTemplate jdbcTemplate = new JdbcTemplate(DruidUtil.getDataSource());
      String sql = "select * from student";
      List<Student> students = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Student.class));
      
    5. queryForObject 将查询到的数据封装为指定对象 第二个参数提供转换类型的字节码文件。一般用于查询结果为单行单列的数据

  • 相关阅读:
    windows anaconda下安装Python的tesserocr库
    windows10上安装docker与碰到的坑
    阿里云centos下部署python flask应用。
    LeetCode--Python合并两个有序链表
    Linux(CentOS)下重置MySQL根(Root)密码,以及远程登录mysql连接IP受限问题解决
    windows下anaconda安装词云wordcloud
    关于selenium使用中谷歌浏览器驱动chromedriver的问题
    LeetCode 184. Department Highest Salary(找出每个部门中最高薪水)
    机器学习七--回归--多元线性回归Multiple Linear Regression
    机器学习六--回归--简单线性回归Simple Linear Regression
  • 原文地址:https://www.cnblogs.com/freesfu/p/13843781.html
Copyright © 2011-2022 走看看