【DBUtil】工具类和【Druid】连接池的使用

一、简介

        commons-dbutils  是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的封装使用dbutils能极大简化idbc编码的工作量。

下载链接

DbUtils – Download Apache Commons DbUtils

二、常用类

2.1QueryRunner类  

        该类封装了SQL的执行,是线程安全的。可以实现增、删、改、查、批处理。其常用的两个方法:

        query():查询

        update():增删改都用update()

2.2 ResultSetHandler接口及其实现类

        该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式。

其实现类包括如下:

ArrayHandler】: 把结果集中的第一行数据转成对象数组

ArrayListHandler】: 把结果集中的每一行数据都转成一个数组,再存放到List中。

BeanHandler】 : 将结果集中的第一行数据封装到一个对应的JavaBean实例中

BeanListHandler】: 将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。

【columnListHandler】: 将结果集中某一列的数据存放到List中

【KevedHandername】:将结果集中的每行数据都封装到Map里,再把这些map再存到一个map里,其key为指定的

【MapHandler】:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。

【MapListHandler】: 将结果集中的每一行数据都封装到一个Map里,然后再存放到List

三、测试

3.1实体类

@Data
public class Actor {
    Integer id;
    String name;
    String sex;
    Date borndate;
    String phone;

    public Actor(Integer id,String name, String sex, Date borndate, String phone) {
        this.id=id;
        this.name = name;
        this.sex = sex;
        this.borndate = borndate;
        this.phone = phone;
    }
    //添加无参构造,底层可能用到反射
    public Actor(){

    }

3.2德鲁伊连接池工具类

需要下载druid的jar包

public class DruidUtil {
    private static DataSource ds;


    static {
        try {
            Properties properties = new Properties();
            properties.load(new FileInputStream("src\\main\\resources\\druid.properties"));
            ds=DruidDataSourceFactory.createDataSource(properties);
        }
         catch (Exception e) {
            e.printStackTrace();
        }
    }

    //获取连接
    public static Connection getConnect() throws SQLException {
        return ds.getConnection();
    }
    //关闭连接, 不是真的关闭,只是放回连接池,断掉对象引用
    public static void close(ResultSet resultSet, Statement statement,Connection connection){

        try {
            if (resultSet!=null){
                resultSet.close();
            }
            if (connection!=null){
                connection.close();
            }
            if (statement!=null){
                statement.close();
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

    }
}

3.3 德鲁伊配置文件druid.properties

#批处理rewriteBatchedStatements
url=jdbc:mysql://localhost:3306/db01?rewriteBatchedStatements=true
username=root
password=123456
driverClassName=com.mysql.jdbc.Driver
initialSize=5
maxActive=20
#最小连接数,空闲时
minIdle=1
#最大等待时间,排队超时
maxWait=60000
validationQuery=SELECT 1
testOnBorrow=true
testWhileIdle=true

3.3 测试方法

    @Test
    public void dBUtilTest() throws SQLException {

        //1.连接
        Connection connect = DruidUtil.getConnect();

        //2.创建QueryRunner
        QueryRunner queryRunner = new QueryRunner();
        //3.执行相关的方法,返回结果集
        String sql="select * from actor where id>=?";
        //new BeanListHandler<>(Actor.class) ,将resultSet-->Actor--》封装到ArrayList中
        //底层使用反射机制去获取Actor类的属性,然后封装
        //1 是给sql语句赋值,可变参数列,按顺序赋值给sql中的问号?
        List<Actor> list = queryRunner.query(connect, sql, new BeanListHandler<>(Actor.class),1);
        for (Actor actor : list) {
            System.out.println(actor);
        }
        // query()会自动关闭资源resultSet、prepareStatement , 因此下面只要关闭connect即可
        JDBCUtil.close(null,connect,null);
    }

注意: 

1.实体类必须要有无参构造器!以及set方法;

2.如果没有set方法,则输出的结果都是null;

3.如果没有无参构造器,则会抛出异常。

四、源码分析

        源码中,会通过反射获取Actor类的所有方法。如果有set开头的方法,则会把查询结果赋予给实体类中的对应属性。

无参构造用于底层创建实例,如果没有无参构造会抛出异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值