QueryRunner类是DbUtils工具类里的核心类之一,提供了多种重载的query方法。
在API里对此类的介绍如下:Executes SQL queries with pluggable strategies for handling ResultSets(执行Sql语句,使用可插拔式策略操作结果集)。

QueryRunner(DataSource ds),其中的一个有参构造方法,不考虑事务问题时就可以用这个构造器直接获取数据库连接,
参数是一个数据库连接对象。

看一下QueryRunner类的源码,这是query的其中一个重载方法,ResultSetHandler接口就提现了可插拔策略,它有多个实现类,来对结果的获取形式进行一个操作。
在这里插入图片描述
下面分别介绍几个query重载方法,也就是获取不同的结果使用的几种ResultHandler实现类.

BeanHandler

BeanHandler(Class type),参数是一个Class实例,这里用到了对象关系映射

  @Test
    public void beanTest() throws SQLException {
        QueryRunner qr=new QueryRunner(new ComboPooledDataSource("c3p0"));
        String sql="select employee_id employeeId,first_name firstName,last_name lastName,email,"+
"phone_number phoneNumber,job_id jobId,salary,manager_id managerId, department_id departmentId from my_employees where employee_id=?";
        Department de = qr.query(sql, new BeanHandler<>(MyEmployees.class),100);
        //MyEmployees是一个JavaBean,里面封装的变量代表my_employees表的列名
        System.out.println(de);

上面的sql语句如果不给每一个列名起一个与javaBean里的成员变量名相同的别名的话结果就会如下图所示,如果列名和变量名相同就不用起别名:
在这里插入图片描述

ArrayListHandler

将每行结果转换为一个Object数组,然后将多个Object数组放入到list集合里

   @Test
    public void oneData() throws SQLException {
        QueryRunner qr=new QueryRunner(new ComboPooledDataSource("c3p0"));
        String sql="select employee_id employeeId,first_name firstName from my_employees where employee_id=?";
        List<Object[]> query = qr.query(sql, new ArrayListHandler(), 100);
     /*   for (Object[] objects : query) {//相当于二维数组,从list集合取出每个Object[]一维数组
            for (Object object : objects) {//遍历一维数组
                System.out.println(object);
     Object[] obj=query.get(0);
        for (Object o : obj) {
            System.out.print(o);
            System.out.print(" ");

MapHandler & MapListHandler

区别就是,前者只能获取一个map集合,也就是只能获取表里第一行满足条件的数据。后者能获取所有满足条件的数据。

 @Test
    public void mapHandlerTest() throws SQLException {
        QueryRunner qr=new QueryRunner(new ComboPooledDataSource("c3p0"));
        String sql="select employee_id,first_name,salary from my_employees where manager_id=103";
        Map map=qr.query(sql,new MapHandler());//MapHandler将ResultSet结果集里的第一行转换成一个map集合
       //Set<Map.Entry<K,V>> entrySet()
        Set<Map.Entry<Object,Object>> set = map.entrySet();
        for (Map.Entry<Object, Object> entry : set) {
            System.out.println(entry.getKey()+" : "+entry.getValue());
    @Test
    public void mapList() throws SQLException {
        int i=0;
        QueryRunner qr = new QueryRunner(new ComboPooledDataSource("c3p0"));
        String sql="select employee_id ,first_name, manager_id from my_employees where manager_id=103";
       //MapListHandler将结果集形成一系列的map集合放入list集合里
        List<Map<String,Object>> list=qr.query(sql,new MapListHandler());
        for (Map<String, Object> map : list) {
            System.out.println("第"+(i++)+"个结果");
            Set<Map.Entry<String,Object>> set = map.entrySet();
            for (Map.Entry<String, Object> entry : set) {
                System.out.println(entry.getKey()+" : "+entry.getValue());
            System.out.println();
                    QueryRunner类是DbUtils工具类里的核心类之一,提供了多种重载的query方法。在API里对此类的介绍如下:Executes SQL queries with pluggable strategies for handling ResultSets(执行Sql语句,使用可插拔式策略操作结果集)。QueryRunner(DataSource ds),其中的一个有参构造方法,不考虑事务问题时就可以用这个构造器直接获取数据库连接,参数是一个数据库连接对象。看一下QueryRunner类的源码
				
commons.dbutils.QueryRunner query方法中RequestSetHandler 参数对应的返回类型: AbstractListHandler -- 返回多行List的抽象类 ArrayHandler -- 返回一行的Object[] ArrayListHandler -- 返回List,每行是Object[] BeanHandler -- 返回第一个Be...
使用QueryRunner 类来执行sql语句的查询与操作 该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。 主要有三个方法query()用于执行select update()用于执行inset/update/delete batch()批处理(不常用) queryrunnet:提供了两个构造方法 默认的构造方法 需要一个 javax.sql.DataSource来作参数的构造方法。 BeanHandler:将结果集中的第一
    使用JDBC技术是一件繁琐的事情,为了使数据库更加高效,有一种简化jdbc技术的操作--DBUtils。DbUtils(org.apache.commons.dbutils.DbUtils)是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。DbUtils类主要负责装载驱动、关闭连接的常规工作。      Qr...
它是由DBUtils包提供的一个工具类,需要引入 commons-dbutils 依赖。 它与JdbcTemplate功能类似,该类简单化了SQL查询,与ResultSetHandler协同工作将使编码量大为减少。 <!--配置QueryRunnerQueryRunner是个单例对象,有多个dao在使都是同一个对象,有可能导致线程安全问题, 配置成多例对象, 保证每次使用这个对象,都是创建新的对象 <bean id="runn
QueryRunner 是什么 QueryRunner 是dbutils包下一个为了增强 JDBC 的类,简化了 JDBC 中数据操作,以及数据与对象之间的转化 使用之前需要先导jar包,jar包下载地址为:http://commons.apache.org/proper/commons-dbutils/ 涉及到事务时创建QueryRunner对象时,不需要传入参数,但需要在方法里传入和其他层同一...
使用JDBC技术是一件繁琐的事情,为了使数据库更加高效,有一种简化jdbc技术的操作–DBUtils。DbUtils(org.apache.commons.dbutils.DbUtils)是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。DbUtils类主要负责装载驱动、关闭连接的常规工作。 QreryRunner类(org.apache.commons.dbutils.QueryRunner) 是Dbutils的核心类之一,它
查询改写,即 Query Rewrite,主要解决的问题是用户的搜索 Query 和 被搜索的文档 不显式匹配。 Query和Doc/Item有Semantic Gap,Query是用户端语言,Doc/Item是商户/平台端语言,风格和词汇都不一样。e.g. Query端是“通马桶”、“剪头”,Doc端是“管道疏通”、“理发”。 Semantic Match是一种解决方... public interface AccountDao { public int addAccount(Account account); public int updateAccount(Account account); publ...
1.QueryRunner的作用: 其实这个是dbutils中的一个方法。什么是dbutils?它的出现就是封装了jdbc的代码,开发dao层代码的简单框架,使sql语句的执行代码变得更加简洁。 2.使用步骤: (1)导入commons-dbutils-1.7.jar包:https://pan.baidu.com/s/1A0Uhf0gg6666FTpnq-nd9g (2)在JDBCUtil...
public class JdbcUtil { private static ComboPooledDataSource dataSource =new ComboPooledDataSource(); public static ComboPooledDataSource getDataSource() { return dataSource; } } src目录下c3p0-config.x...
queryrunner requires a datasource to be invoked in this way, or a connection should be passed in