Apache DBUtils框架(一)

306 阅读3分钟
  • Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能 需要jar包:commons-dbutils-1.7.jar
  • 可以进commons-dbutils-1.7-->apdiocs-->index.html看官方文档
  • 重点的类DbUtils、QueryRunner、RuseltSetHandler
  • 我在下面也会放些常见的类和类方法(图来自DT课堂颜群老师)

练习的代码

实体类:

public class User {
    private int id;
    private String name;

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }
    public User() {
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

实现类ArrayHandler : 返回结果集中的第一行数据,并用Object[]接收

  public  static void testArrayHandler() throws SQLException {
        //参数是一个数据源,有参的是自动提交事务
        QueryRunner runner = new QueryRunner(getDataSoure());
        //第一个参数是sql语句,第二参数是结果集,第三个参数是sql语句的?的值
        Object[] user = runner.query("select * from t_user where id > ?", new ArrayHandler(), 1);
        System.out.println(user[0]+","+user[1]);
    }
  • 数据源放的是前面那章c3p0的数据源(如果有不懂可以去看下c3p0)

测试

  public static void main(String[] args) throws SQLException {
      testArrayHandler();
    }

运行结果

实现类ArrayListHandler : 返回结果集中的多行数据,并用List<Object[]>接收

  public static void testArrayListHandler() throws SQLException {
        QueryRunner runner = new QueryRunner(getDataSoure());
        //第一个参数是sql语句,第二参数是结果集,第三个参数是sql语句的?的值
        List<Object[]> users = runner.query("select * from t_user where id>?", new ArrayListHandler(), 1);
        for (Object[] user : users) {
            System.out.println(user[0]+","+user[1]);
        }
    }

运行结果

  • 这二个的区别在于:一个只能返回一条数据,另外一个可以返回全部数据

实现类BeanHandler : 返回结果集中的第一行数据,并用对象(User)接收

 public static void testBeanHandler() throws SQLException {
        QueryRunner runner = new QueryRunner(getDataSoure());
        //第一个参数是sql语句,第二参数是结果集,第三个参数是sql语句的?的值
        User user = runner.query("select * from t_user where id>?", new BeanHandler<User>(User.class), 1);
        System.out.println(user.getId()+","+user.getName());
    }
  • 运行结果和上述第一个实体类运行结果一样

实现类BeanListHandler : 返回结果集中的多行数据,并用对象List< User>接收

 public static void testBeanListHandler() throws SQLException {
        QueryRunner runner = new QueryRunner(getDataSoure());
        //第一个参数是sql语句,第二参数是结果集,第三个参数是sql语句的?的值
        List<User> users = runner.query("select * from t_user where id > ? ", new BeanListHandler<User>(User.class), 1);
        for (User user : users) {
            System.out.println(user.getId()+","+user.getName());
        }
    }
  • 运行结果和上述第二个实体类运行结果一样

实现类BeanMapHandler : 返回结果集中的多行数据,并用对象加上key值,通过key值来取value值

 public static void testBeanMapHandler() throws SQLException {
        QueryRunner runner = new QueryRunner(getDataSoure());
        //第一个参数是sql语句,第二参数是结果集,第三个参数是sql语句的?的值
        Map<Integer,User> users = runner.query("select * from t_user where id>?", new BeanMapHandler<Integer,User>(User.class,"id"), 1);
        System.out.println(users.get(2).getId()+","+users.get(2).getName());
    }
  • 需要注意在BeanMapHandler<Integer,User>(User.class,"id")中<>和()中的顺序是反过来的
  • 还有(User.Class)是通过反射来取,所以实体类必须要有无参构造方法
  • 上述个人观点,如果有错误欢迎指正