JDBC连接池&DButils

一、JDBC连接池

  • 概念:实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决这个问题,通过我们采用连接池技术,来共享链接Connection,解决资源浪费,提高代码性能,代码没有节省

  • 规范:java为数据库连接池提供了公共的接口 javax.sql.DataSource,常见的连接池:DBCP\C3P0都用不同的方法实现了这个接口

二、C3P0连接池

  • 使用步骤
    1. 导入2个jar包
    JDBC连接池&DButils_第1张图片

    2.配置文件设置参数
    配置文件名称:c3p0-config.xml(固定)
    配置文件位置:src(类路径)
    配置文件内容:修改常见配置项包括必须项user,password,diverClass(驱动,如com.mysql.jdbc.Driver),jdbcUrl(mysql路径,如jdbc:mysql://localhost:3306/数据库名称)和一些其他的基本配置项
    3.编写工具类
    c3p0提供核心工具类:ComboPooledDataSource,要使用连接池就必须创建该类的实例对象(注意区分命名配置和默认配置)
    此外,需要自己创建一个工具类,例如C3P0Utils,该类的代码应包括如下
    JDBC连接池&DButils_第2张图片

    JDBC连接池&DButils_第3张图片

三、使用DBUtils操作增删改查

  • 概念:如果只使用JDBC开发,会有大量冗余代码,为了简化开发就使用apache commons组件的成员之一:DBUtils(封装了对JDBC的操作)
  • 三个核心功能
    1.QueryRunner中提供对sql语句操作的API
    2.ResultSetHandler接口,用于定义select操作后,怎样封装结果集
    3.DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法

四、 QueryRunner核心类

  • QueryRunner(DataSource ds),提供数据源(连接池),DBUtils底层自动维护链接connection
  • update(String sql,Object..params),执行更新数据
  • QueryRunner的查询方法是:
    public T query(String sql, ResultSetHandler rh, Object… params)
    public T query(Connection con, String sql, ResultSetHandler rh, Object… params)
    query()方法会通过sql语句和params查询出ResultSet,然后通过rh把ResultSet转换成对应的类型再返回

五、ResultSetHandler结果集处理类

  • 执行select语句之后得到的是ResultSet,然后对ResultSet进行转换,得到最终我们想要的数据。可以把ResultSet的数据放到一个List中,也可以放到一个Map中,或是一个Bean中。
  • DBUtils提供了一个接口ResultSetHandler,它就是用来将ResultSet转换成目标类型的工具。
    JDBC连接池&DButils_第4张图片

    案例讲解:
  • BeanListHandler的使用:


    JDBC连接池&DButils_第5张图片
    image.png
  • BeanHandler的使用:
    该方法中调用query(sql,rsh,param),其中第三个参数需要现在该方法括号内声明变量,且该方法直接声明为Product类型,所以将查询返回的单一的查询结果直接return。


    image.png

六、DBUtils工具类

closeQuietly(Connection conn)关闭连接,如果有异常try后不抛出
commitAndCloseQuietly(Connection conn)提交并关闭连接
rollbackAndCloseQuietly(Connection conn)回滚并关闭连接

综合案例

  • 案例——删除


    JDBC连接池&DButils_第6张图片
  • 案例——查询1
public void fun1() throws SQLException {
        DataSource ds = JdbcUtils.getDataSource();
        QueryRunner qr = new QueryRunner(ds);
        String sql = "select * from tab_student where number=?";
        Map map = qr.query(sql, new MapHandler(), "S_2000");
        System.out.println(map);
    }
  • 案例——查询2
public void fun2() throws SQLException {
        DataSource ds = JdbcUtils.getDataSource();
        QueryRunner qr = new QueryRunner(ds);
        String sql = "select * from tab_student where number=?";
        Student stu = qr.query(sql, new BeanHandler(Student.class), "S_2000");
        System.out.println(stu);
    }

八、JavaBean组件

  • 概念:JavaBean就是一个类,在开发中常用于封装数据
  • 特性
    1. 需要实现接口:java.io.Serializable (通常省略不写)
    2. 提供私有字段:private 类型 字段名;
    3. 提供getter/setter方法
    4. 提供无参函数
  • 举例


    JDBC连接池&DButils_第7张图片

你可能感兴趣的:(JDBC连接池&DButils)