dbUtils是对JDBC的完全封装,只需要导入连接池,添加sql语句,dbUtils就可以返回各种封装形式的结果集。
如果纯手动的话,在DAO层使用JDBC查询一个语句的话,需要以下几步:
1创建Connection对象
2创建PreparedStatement对象
3创建sql语句
4使用PreparedStatement对象的Query() Update()等查询更新方法,获取ResultSet结果集。
5对查询结果集进行封装,有可能封装成Bean/集合等。
6关闭各个对象
(期间还要做很多异常处理,整个代码全是try-catch块,非常难看)

但是dbUtils能做到的就是
1创建dbUtils封装对象,并传入DataSource连接池资源
2创建sql语句,可以是预编译类型的含参数sql语句 例如 select * from where ? = ?;
3获取dbUtils封装对象返回的结果集
-----------------------------------
    dbutils核心
        1.QueryRunner类
            它是用于执行sql语句的类。
            1.query 用于执行select
            2.update 用于执行update delete insert
            3.batch 批处理
        2.ResultSetHandler接口
            用于定义结果集的封装
            它提供九个实现类,可以进行不同的封装。
        3.DbUtils类
            它提供关于关闭资源以及事务rollback,commit操作。
Dbutlis详解
        1.QueryRunner
            1.QueryRunner怎样获取
                1.new QueryRunner()
                    如果是使用这种构造创建的QueryRunner,它的事务是手动控制.
                2.new QueryRunner(DataSource ds);
                    如果是使用这种构造,它的事务是自动事务,简单说,一条sql一个事务。

            2.QueryRunner中的三个核心方法
                query
                update
                batch
                对于上述三个方法,它们提供很多重载。
                如果QueryRunner在创建时,没有传递DataSource参数,那么在使用
                query,update,batch方法时,要传递Connection参数
                如果QueryRunner在创建时,传递了Dataource参数,好么在使用
                query,update,batch方法时,不需要传递Connection参数。

            总结:
                怎样配套使用:
                    QueryRunner runner=new QueryRunner();
                    runner.query(Connection,sql,ResultSetHandler,Object... param);
                    runner.update(Connection,sql,Object...param);
                    runner.batch(Connection con,sql,Object[][] objs);

                    QueryRunner runner=new QueryRunner(DataSource ds);
                    runner.query(sql,ResultSetHandler,Object... param);
                    runner.update(sql,Object...param);
                    runner.batch(sql,Object[][] objs);

        -----------------------------------------------------------------
        ResultSetHandler接口
            用于封装结果集.
            -----------
并且,这个结果集有9种封装的形式。
ResulsetHandler九个实现类

             ArrayHandler, 将结果集中第一条记录封装到Object[],数组中的每一个元素就是记录中的字段值。
             ArrayListHandler, 将结果集中每一条记录封装到Object[],数组中的每一个元素就是记录中的字段值。在将这些数组装入到List集合。

             BeanHandler(重点), 将结果集中第一条记录封装到一个javaBean中。
             BeanListHandler(重点), 将结果集中每一条记录封装到javaBean中,在将javaBean封装到List集合.

             ColumnListHandler, 将结果集中指定列的值封装到List集合.

             MapHandler, 将结果集中第一条记录封装到Map集合中,集合的 key就是字段名称,value就是字段值
             MapListHandler, 将结果集中每一条记录封装到Map集合中,集合的 key就是字段名称,value就是字段值,在将这些Map封装到List集合

             KeyedHandler,在使用指定的列的值做为一个Map集合的key,值为每一条记录的Map集合封装。
             ScalarHandler 进行单值查询 select count(*) from account;

package com.customer.dao;

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

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.customer.domain.Customer;
import com.customer.utils.DataSourceUtils;

public class CustomerDao {

        public List<Customer> findAll() throws SQLException {
                String sql = "select * from customer";
                QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
                return runner.query(sql, new BeanListHandler(Customer.class));
        }

}

dbUtils的基本使用的更多相关文章

  1. dbutils基本使用

    dbutils的查询,主要用到的是query方法,增加,修改和删除都是update方法,update方法就不讲了 只要创建ResultSetHandler接口不同的实现类对象就可以得到想要的查询结果, ...

  2. BenUtils组件和DbUtils组件

    BenUtils组件和DbUtils组件 [TOC] 1.BenUtils组件 1.1.简介 程序中对javabean的操作很频繁,所有Apache提供了一套开源api,方便javabean的操作!即 ...

  3. 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】

    一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...

  4. <十六>JDBC_使用 DBUtils 编写通用的DAO

    接口 : DAO<T>.java import java.sql.Connection;import java.sql.SQLException;import java.util.List ...

  5. <十五>JDBC_使用 DBUtils 进行更新、查询操作

    详解待续... DBUtilsTest.java import java.sql.Connection;import java.sql.Date;import java.sql.ResultSet;i ...

  6. DBUtils 笔记

    一.DBUtils介绍  apache 什么是dbutils,它的作用 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作.可 ...

  7. python DBUtils.PooledDB 中 maxcached 和 maxconnections

    PooledDB 有这么几个参数 mincached : the initial number of idle connections in the pool (the default of 0 me ...

  8. 【Java EE 学习 17 上】【dbutils和回调函数】

    一.dbutils的核心就是回调函数,可以说如果没有回调函数的思想,dbutils是不可能被开发出来的. 对于dbutils中的QuryRunner类,向该类的query方法提供不同的参数,可以得到不 ...

  9. 【Java EE 学习 16 下】【dbutils的使用方法】

    一.为什么要使用dbutils 使用dbutils可以极大程度的简化代码书写,使得开发进度更快,效率更高 二.dbutils下载地址 http://commons.apache.org/proper/ ...

  10. DBUtils

    DBUtils中核心对象 > QueryRunner类 它提供了操作数据增删改查的方法 query() 执行select语句的 update() 执行insert update delete 语 ...

随机推荐

  1. 可存放任意类型变量的动态数组--C语言实现

    之前在训练营的时候被要求用C语言实现一个可以存放任意类型数据的栈.现在尝试实现一个数组版本. 首先用到的结构体如下(接触了Win32编程所以长得有点像里面的那些类型): typedef struct ...

  2. 存储结构比较vector,list,dequeue,stack(转)

        vector适用:对象数量变化少,简单对象,随机访问元素频繁list适用:对象数量变化大,对象复杂,插入和删除频繁最大的区别是,list是双向的,而vector是单向的.因此在实际使用时,如何 ...

  3. [COGS 2051] 王者之剑

    Saber大法吼 2051. 王者之剑 ★★★☆   输入文件:Excalibur.in   输出文件:Excalibur.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述 ...

  4. 再起航,我的学习笔记之JavaScript设计模式03

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 上一 ...

  5. 初探Matplotlib

    初探Matplotlib 例子来自此书: <Python编程从入门到实战>[美]Eric Matthes 使用pyplot绘图,一般的导入方法import matplotlib.pyplo ...

  6. java中的各种数据类型在内存中存储的方式

    原文地址:http://blog.csdn.net/aaa1117a8w5s6d/article/details/8251456 1.Java是如何管理内存的 java的内存管理就是对象的分配和释放问 ...

  7. Python Socket 简单聊天室2

    上篇文章写了一个简单的单线程的一问一答的简单聊天室.这次我们使用SocketServer模块搭建一个多线程异步的聊天室. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  8. TestNG的组测试和组中组测试

    在编写测试的过程中,我们经常遇到只想执行个别或者某一部分/某一类型的测试用例,这时我们可以使用TestNG的分组测试方法 分组测试在配置时,TestNG执行的原则是:只保留最小集合进行执行 看代码: ...

  9. sublime text3 配置使用

    前言 sublime text3 是一款优秀的代码编辑器,很多好用的功能让我成为其忠实用户. 流程 1.安装完成后首先配置package control,把下面的代码复制到sublime 的控制台: ...

  10. Andrew Ng机器学习课程笔记(五)之应用机器学习的建议

    Andrew Ng机器学习课程笔记(五)之 应用机器学习的建议 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7368472.h ...