• 数据库连接池


    数据库连接池

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

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

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

    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 将查询到的数据封装为指定对象 第二个参数提供转换类型的字节码文件。一般用于查询结果为单行单列的数据

  • 相关阅读:
    ssdb使用笔记
    跟我学爬虫-2-使用正则表达式解析文本
    跟我学爬虫-1-爬虫简介
    python int函数转换浮点型字符串的坑???
    python使用smtplib和email发送腾讯企业邮箱邮件
    php文件之间传值的三种主流并且常用的方式
    验证码的输入框与图片不能对齐问题
    web前端命名规范
    css盒子模型
    css基础
  • 原文地址:https://www.cnblogs.com/freesfu/p/13843781.html
Copyright © 2020-2023  润新知