DBUtils工具类-QueryRunner、ResultSetHandler、DbUtils。连接池-dbcp、c3p0、druid。

dbcp找不到工厂类
c3p0工程类配置和set都可以
druid 配置set出错

JdbcTemplate

1 DBUtils工具类

1.1 如果我们使用jdbc进行开发,我们会发现代码重复度很高。

为了简化jdbc开发,所以apache commons 组件中给我们提供了一个成员DBUtils。
  • DBUtils 就是简化jdbc开发的工具包。
    使用的时候需要在项目中导入jar包。
    commons-dbutils-版本.jar
  • DBUtils封装了对jdbc的操作,简化了jdbc操作。

1.2 DBUtils中有三个核心对象

  • QueryRunner:提供了对sql语句操作的API。

  • ResultSetHandler接口:定义了执行完select语句后,如何封装结果集。

  • DbUtils:工具类,定义了关闭资源和与事务相关的方法。

  • 注意:DBUtils仅仅只是封装了jdbc的操作。不仅需要导入DBUtils的jar包,一定不能忘了要导入 jdbc的jar包。

1.3 QueryRunner 核心类

  • 构造方法
    QueryRunner()
    QueryRunner(DataSource ds)

  • 成员方法
    用于执行insert,update,delete语句
    int update(Connection conn, String sql, Object… params)
    int update(String sql, Object… params)
    用于执行select语句
    T query(Connection conn, String sql, ResultSetHandler rsh, Object… params)
    T query(String sql, ResultSetHandler rsh, Object… params)

  • 练习:使用QueryRunner完成增删改操作

package com.mysql.dbUtils.demo;
/*
 * 使用DBUtils工具类完成增删改操作
 *   int	update(Connection conn, String sql, Object... params)
 * */
import com.mysql.dbUtils.jdbcutils.JdbcUtil;
import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test;


import java.sql.SQLException;

public class Demo1 {
   
    @Test
    public void insert() throws SQLException {
   
        QueryRunner qr = new QueryRunner();
        Object[] params = {
   50,"帅哥部","邮电大学"};
        int i = qr.update(JdbcUtil.getConnection(), "insert into dept values (?,?,?)", params);
        System.out.println(i);
    }

    @Test
    public void update() throws SQLException {
   
        QueryRunner qr = new QueryRunner();
        Object[] params = {
   "运营部","邮电",50};
        int i = qr.update(JdbcUtil.getConnection(), "update dept set dname=?,address=? where deptid=?", params);
        System.out.println(i);
    }

    @Test
    public void delete() throws SQLException {
   
        QueryRunner qr = new QueryRunner();
        int i = qr.update(JdbcUtil.getConnection(), "delete from dept where deptid=?", 50);
        System.out.println(i);
    }
}
package com.mysql.dbUtils.jdbcutils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class JdbcUtil {
   
    private JdbcUtil(){
   }
    private static Properties info = new Properties();
    private static Connection conn;
    static{
   
        InputStream is = JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties");
        try {
   
            info.load(is);
        } catch (IOException e) {
   
            e.printStackTrace();
        }
    }

    static{
   
        try {
   
            Class.forName(info.getProperty("driver"));
        } catch (ClassNotFoundException e) {
   
            e.printStackTrace();
        }
    }

    public static Connection getConnection(){
   
        try {
   
            conn = DriverManager.getConnection(info.getProperty("url"),info.getProperty("user"),info.getProperty("password"));
        } catch (SQLException e) {
   
            e.printStackTrace();
        }
        return conn;
    }
}

  • 配置信息内容

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useSSL=false
user=root
password=123456


1.4 QueryRunner实现查询

  • T query(Connection conn, String sql, ResultSetHandler rsh, Object… params)

  • ResultSetHandler接口:结果集的处理类
    实现类:
    ArrayHandler:把结果集中第一条数据封装到一个Object数组中。
    数组中的每一个元素就是这条记录中的每一个字段值。
    ArrayListHandler:把结果集中每一条记录封装到一个Object数组中,
    把数组在封装到List集合中。
    BeanHandler:把结果集中的第一个数据封装到一个指定的javaBean中。
    BeanListHandler:把结果集中的每一条数据封装到一个指定的javaBean中。
    把每一个javaBean封装到集合中。
    ColumnListHandler:把结果集中指定列的字段值封装到List集合中。
    MapHandler:把结果集中的第一条数据封装到map集合中,key是列名,value是数据
    MapListHandler:把结果集中的每一行封装到一个map集合中。
    把map集合存储到List中。
    ScalarHandler:用来获取单个数据。比如select count(*) from dept;

  • javaBean:就是一个java类,在开发中用于封装数据。
    实现Serializable接口,这个可以省略,不影响代码
    私有字段
    无参构造
    get和set方法

package com.mysql.dbUtils.demo;

import com.mysql.dbUtils.domain.Dept;
import com.mysql.dbUtils.jdbcutils.JdbcUtil;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.*;
import org.junit.Test;

import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;

/*
 * 使用DBUtils工具类完成查询操作
 * */
public class Demo2 {
   
    @Test
    //ArrayHandler
    public void test1() throws SQLException {
   
        QueryRunner qr = new QueryRunner();
        Object[] obj = qr.query(JdbcUtil.getConnection()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值