Dbutils简单使用

Dbutils是apache基于jdbc封装的操作数据库的包,在保证性能的同时操作更加的简洁。

有两个主要的类QueryRunner类和ResultSetHandler接口,QueryRunner主要用于数据库的操作 update方法用于增删改 query用于查询;

QueryRunner类

  构造方法

    QueryRunner qr =new QueryRunner();    使用无参构造的时候,调用update方法和query方法时就需要使用带Connection 类型参数的重载形式 

    QueryRunner qr= new QueryRunner(DataSource dataSource);   使用无参构造的时候,调用update方法和query方法时就需要使用带Connection 类型参数的重载形式  

  常用方法

    int=qr.update(Connection con ,String sql ,Param)  数据库的增删改 

      参数一:连接池对象(这个在无参构造的时候使用)

      参数二:sql语句

      参数三:可变参数(就是sql占位符的值)

      返回值:int类型的 返回受影响的行数

package db;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbutils.QueryRunner;

import java.sql.SQLException;

public class TestDbutils {
    public static void main(String[] args) throws SQLException {
        ComboPooledDataSource dataSource=new ComboPooledDataSource();//不写取默认的配置
        QueryRunner qr=new QueryRunner(dataSource);
        String sql="update oak_test set uid=1 where uid=?;";
        int a =qr.update(sql,"123451");
    }

}

    query(Connection con,String sql ,Param ...,ResultSetHandler)

      该方法用于出查询操作

      参数一:Connection 数据库连接对象, 使用带参构造时可以不用

      参数二:sql语句

      参数三:表示对结果集的处理方式 (ResultSetHandler接口)

      参数四:可变参数(就是sql占位符的值)

      ResultSetHandler接口用于数据库查询结果的整合

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

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

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

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

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

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

        ColumnListHandler:将结果集中某一列的数据存放到List中。

        KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里(List<Map>),再把这些map再存到一个map里,其key为指定的列。

        ScalarHandler:将结果集第一行的某一列放到某个对象中。//重点

 

 

package db;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.*;

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

public class TestDbutils {
    public static void main(String[] args) throws SQLException {
        ComboPooledDataSource dataSource=new ComboPooledDataSource();//不写取默认的配置
        QueryRunner qr=new QueryRunner(dataSource);
        String sql="select * from oak_test ;";
//        TestDbutils.testArrayHandler(sql,qr);
//        TestDbutils.testArrayListHandler(sql,qr);
//        TestDbutils.testbeanHandler(sql,qr);
//        TestDbutils.testbeanListHandler(sql,qr);
//        TestDbutils.testMapHandler(sql,qr);
//        TestDbutils.testMapListHandler(sql,qr);
        TestDbutils.testScalarHanddler(sql,qr);

    }
    //ArrayHandler将第一列的数据转化成一个对象数据[object1,object2,object3]
    public static void testArrayHandler (String sql,QueryRunner qr) throws SQLException{
        Object result[]=qr.query(sql,new ArrayHandler());
        //数组中存放 String类型的1 Integer类型的15和String类型的1111111
        for(Object o:result){
            System.out.println(o);
        }
    }
    //ArrayListHandler将结果的数据转化成多个对象数据[object1,object2,object3],在存放到List中
    public static void testArrayListHandler (String sql,QueryRunner qr) throws SQLException{
        List<Object[]> result=qr.query(sql,new ArrayListHandler());
        //先循环集合List得到一个数组 在循环数组中的每个对象的值
        for(Object[] list:result){
            for(Object o:list){
                System.out.println(o);

            }
        }

    }
    //beanHandler和beanListHandler返回的值比较简单 所以这两种方法相对使用的多一些
    //beanHandler将结果集中的第一行数据封装到一个对应的JavaBean实例中 这里的JavaBean指根据数据库表创建的类的对象
    public static void testbeanHandler (String sql,QueryRunner qr) throws SQLException{
        //返回的是一个对象
        DbUser dbuser=(DbUser)qr.query(sql,new BeanHandler(DbUser.class));
        System.out.println(dbuser.getUid());
        System.out.println(dbuser.getLoginname());
        System.out.println(dbuser.getLoginpass());

    }
    //beanListHandler将结果集中每一行数据封装到一个对应的JavaBean实例中 在把所有的实例存放到list中
    public static void testbeanListHandler (String sql,QueryRunner qr) throws SQLException{
        //返回的是一个DbUser对象组成的集合
        List<DbUser> list=(List)qr.query(sql,new BeanListHandler(DbUser.class));
        for(DbUser user:list){
            System.out.println(user.getUid());
        }
    }
    //MapHandler将结果第一行封装到一个Map里 key是列名 value是对应的值
    public static void testMapHandler(String sql,QueryRunner qr) throws SQLException{
        Map result=qr.query(sql,new MapHandler());
        System.out.println(result);
    }
    //MapListHandler将结果每一行封装到一个Map里 key是列名 value是对应的值 在存放到List中
    public static void testMapListHandler(String sql,QueryRunner qr) throws SQLException{
        List result=qr.query(sql,new MapListHandler());
        System.out.println(result);
    }
    //将结果集第一行的某一列放到某个对象
    public static void testScalarHanddler(String sql,QueryRunner qr) throws SQLException{
        Object o=qr.query(sql,new ScalarHandler(2));
        System.out.println(o);
    }



}

 

 

posted @ 2019-06-24 11:16  国际惯例  阅读(184)  评论(0编辑  收藏  举报