DbUtils的介绍,下载,实战和Handler实现类

目录

一、介绍

二、下载

三、实战

1、创建实体类

2、创建连接数据库类

3、增删改查测试

四、Handler实现类


一、介绍

Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。

二、下载

DbUtils – Download Apache Commons DbUtils

导入包:

1、复制commons-dbutils-1.8.1.jar到项目的lib目录下

2、右键-->Add As Library

三、实战

1、创建实体类

在公司中将这样的类称之为 实体类 entry 、pojo、javabean

package com.bigdata.jdbc.entry;

public class Users {

    private int usersId;
    private String userName;
    private String password;

    public Users(int usersId, String userName, String password) {
        this.usersId = usersId;
        this.userName = userName;
        this.password = password;
    }

    public int getUsersId() {
        return usersId;
    }
    public void setUsersId(int usersId) {
        this.usersId = usersId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "Users{" +
                "usersId=" + usersId +
                ", userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

2、创建连接数据库类

使用我们以前的写法即可

3、增删改查测试

新增:

package com.bigdata.jdbc.dbutilstest;

import com.bigdata.jdbc.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;

import java.sql.Connection;
import java.sql.SQLException;

public class InsertDemo {

    public static void main(String[] args) throws Exception {
        Connection connection = JdbcUtils.getConnection();
        QueryRunner qRunner = new QueryRunner();
        String sql = "insert into user values(null,'张三','123456')";
        int num = qRunner.update(connection, sql);
        System.out.println("插入成功:"+num);
    }
}

新增的第二种写法:

package com.bigdata.jdbc.dbutilstest;

import com.bigdata.jdbc.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;

import java.sql.Connection;

public class InsertDemo2 {

    public static void main(String[] args) throws Exception {
        Connection connection = JdbcUtils.getConnection();
        QueryRunner qRunner = new QueryRunner();
        String sql = "insert into user values(null,?,?)";
        //int num = qRunner.update(connection, sql,"lisisi","abc123");
        Object[] param = {"sisili","123abc"};
        int num =qRunner.update(connection,sql,param);
        System.out.println("插入成功:"+num);
    }
}

批量新增数据:

package com.bigdata.jdbc.dbutilstest;

import com.bigdata.jdbc.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;

import java.sql.Connection;
import java.util.Arrays;

public class InsertDemo3 {

    public static void main(String[] args) throws Exception {
        Connection connection = JdbcUtils.getConnection();
        QueryRunner qRunner = new QueryRunner();
        String sql = "insert into user values(null,?,?)";
        //int num = qRunner.update(connection, sql,"lisisi","abc123");
        Object[][] arr=new Object[3][];
        arr[0]=new Object[]{"陈嘉豪","123124"};
        arr[1]=new Object[]{"李明钊","1231da24"};
        arr[2]=new Object[]{"宁炳哲","12312dd4"};

        int[] num =qRunner.batch(connection,sql,arr);

        System.out.println("插入成功:"+ Arrays.toString(num));
    }
}

查询:

package com.bigdata.jdbc.dbutilstest;

import com.bigdata.jdbc.entry.Users;
import com.bigdata.jdbc.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


class MyHandler implements ResultSetHandler<List<Users>>{

    @Override
    public List<Users> handle(ResultSet resultSet) throws SQLException {

        ArrayList<Users> users = new ArrayList<>();
        while(resultSet.next()){
            int id = resultSet.getInt("id");
            String username = resultSet.getString("username");
            String password = resultSet.getString("password");
            users.add(new Users(id,username,password));
        }

        return users;
    }
}

public class QueryDemo {

    public static void main(String[] args) throws SQLException {
        Connection connection = JdbcUtils.getConnection();
        QueryRunner qr = new QueryRunner();
        String sql = "select * from user";
        List<Users> list = qr.query(connection,sql, new MyHandler());
        System.out.println(list);
    }
}

修改:

Connection connection = JdbcUtils.getConnection();
        QueryRunner qRunner = new QueryRunner();
        String sql = "update user set password='456789' where username=?";
        int num = qRunner.update(connection, sql,"张三");
        System.out.println("修改成功:"+num);

删除:

QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
String sql = "delete from user where id = ?";
int update = qr.update(sql, 7);

四、Handler实现类

备注:DbUtils给我们提供了10个ResultSetHandler实现类,分别是:
①ArrayHandler: 将查询结果的第一行数据,保存到Object数组中
②ArrayListHandler 将查询的结果,每一行先封装到Object数组中,然后将数据存入List集合
③BeanHandler 将查询结果的第一行数据,封装到user对象
④BeanListHandler 将查询结果的每一行封装到user对象,然后再存入List集合
⑤ColumnListHandler 将查询结果的指定列的数据封装到List集合中
⑥MapHandler 将查询结果的第一行数据封装到map结合(key==列名,value==列值)
⑦MapListHandler 将查询结果的每一行封装到map集合(key==列名,value==列值),再将map集合存入List集合
⑧BeanMapHandler 将查询结果的每一行数据,封装到User对象,再存入mao集合中(key==列名,value==列值)
⑨KeyedHandler 将查询的结果的每一行数据,封装到map1(key==列名,value==列值 ),然后将map1集合(有多个)存入map2集合(只有一个)
⑩ScalarHandler 封装类似count、avg、max、min、sum......函数的执行结果
以上10个ResultSetHandler实现类,常用的是BeanHandler、BeanListHandler和ScalarHandler,下面将对这三个实现类,写测试类

测试BeanHandler策略:

package com.bigdata.jdbc.dbutilstest;

import com.bigdata.jdbc.entry.Users;
import com.bigdata.jdbc.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


public class QueryDemo2 {

    public static void main(String[] args) throws SQLException {
        Connection connection = JdbcUtils.getConnection();
        QueryRunner qr = new QueryRunner();
        String sql = "select * from user";
        // 首先users 这个实体类,需要一个无参数的构造方法
        // 查询结果只返回一条 :头一条
        // 假如表的字段名和实体的字段名不一样,对应的结果没有数据。
        Users users = qr.query(connection,sql,  new BeanHandler<Users>(Users.class));
        System.out.println(users);
    }
}

测试BeanListHandler策略

package com.bigdata.jdbc.dbutilstest;

import com.bigdata.jdbc.entry.Users;
import com.bigdata.jdbc.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;


public class QueryDemo3 {

    public static void main(String[] args) throws SQLException {
        Connection connection = JdbcUtils.getConnection();
        QueryRunner qr = new QueryRunner();
        String sql = "select * from user";
        // 首先users 这个实体类,需要一个无参数的构造方法
        // 查询结果是一个List集合
        // 假如表的字段名和实体的字段名不一样,对应的结果没有数据。
        List<Users> users = qr.query(connection,sql,  new BeanListHandler<Users>(Users.class));
        System.out.println(users);
    }
}

测试ScalarHandler策略:

package com.bigdata.jdbc.dbutilstest;

import com.bigdata.jdbc.entry.Users;
import com.bigdata.jdbc.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;


public class QueryDemo4 {

    public static void main(String[] args) throws SQLException {
        Connection connection = JdbcUtils.getConnection();
        QueryRunner qr = new QueryRunner();
        String sql = "select count(1) from user";

        Object object = qr.query(connection,sql, new ScalarHandler());
        System.out.println(object);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

出发行进

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值