dbUtils的基本使用
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的基本使用的更多相关文章
- dbutils基本使用
dbutils的查询,主要用到的是query方法,增加,修改和删除都是update方法,update方法就不讲了 只要创建ResultSetHandler接口不同的实现类对象就可以得到想要的查询结果, ...
- BenUtils组件和DbUtils组件
BenUtils组件和DbUtils组件 [TOC] 1.BenUtils组件 1.1.简介 程序中对javabean的操作很频繁,所有Apache提供了一套开源api,方便javabean的操作!即 ...
- 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】
一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...
- <十六>JDBC_使用 DBUtils 编写通用的DAO
接口 : DAO<T>.java import java.sql.Connection;import java.sql.SQLException;import java.util.List ...
- <十五>JDBC_使用 DBUtils 进行更新、查询操作
详解待续... DBUtilsTest.java import java.sql.Connection;import java.sql.Date;import java.sql.ResultSet;i ...
- DBUtils 笔记
一.DBUtils介绍 apache 什么是dbutils,它的作用 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作.可 ...
- python DBUtils.PooledDB 中 maxcached 和 maxconnections
PooledDB 有这么几个参数 mincached : the initial number of idle connections in the pool (the default of 0 me ...
- 【Java EE 学习 17 上】【dbutils和回调函数】
一.dbutils的核心就是回调函数,可以说如果没有回调函数的思想,dbutils是不可能被开发出来的. 对于dbutils中的QuryRunner类,向该类的query方法提供不同的参数,可以得到不 ...
- 【Java EE 学习 16 下】【dbutils的使用方法】
一.为什么要使用dbutils 使用dbutils可以极大程度的简化代码书写,使得开发进度更快,效率更高 二.dbutils下载地址 http://commons.apache.org/proper/ ...
- DBUtils
DBUtils中核心对象 > QueryRunner类 它提供了操作数据增删改查的方法 query() 执行select语句的 update() 执行insert update delete 语 ...
随机推荐
- [js] post 方式打开新窗口
一.前因 一般我们是用 window.open(url,name,params); 打开新窗口, url 会携带一些参数, 但存在参数过多,引发url 过长截断,无法打开正确窗口, 所以我们需要使用 ...
- hive配置过程中出现的一个问题
执行hive里面的insert语句的时候,报错,执行失败查看hadoop的日志文件之后发现错误的详细信息如下: 把hdfs-site.xml中的hadoop.tmp.dir这个属性添加到core-si ...
- web前端开发面试题(未完待续)
一.HTML与XHTML的不同:1)XHTML元素必须被正确地嵌套 2)元素必须被关闭 如:<h1>--</h1>关闭 3)标签名必须用小写字母 4)XHTML文档必须有根 ...
- spring入门之环境搭建
本人刚刚接触spring,看了一些教程,但是很多概念都不懂(以前没接触过,看着很抽象),所以我觉得通过动手可能会更好的理解并且掌握.看了一些小实例,但是都没有成功,终于在各种尝试之后搭建成功了,现在我 ...
- TypeScript02 方法特性【参数种类、参数个数】、generate方法、析构表达式、箭头表达式、循环
1 方法的参数 1.1 必选参数 调用方法时实参的个数必须和定义方法时形参在数量和类型上匹配 /** * Created by Administrator on 2017/8/2 0002. */ f ...
- elk 5.x的部署
前言 elk是由elasticsearch.logstash.kibana三者组成 其中elasticsearch主要负责数据存储与搜索 logstash主要负责收集日志信息以及对日志信息的切片索引等 ...
- 【RegExp】JavaScript中正则表达式判断匹配规则以及常用方法
字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在. 正则表达式是一种用来匹配字符串的强有力的武器.它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符 ...
- wordpress设置“固定链接”后,页面404错误的解决方法
Nginx 解决方案: 网上盛传的方法是: 在 /etc/nginx/nginx.conf文件的 loction / {} 中添加 if (-f $request_filename/index.htm ...
- 39. leetcode 326. Power of Three
326. Power of Three Given an integer, write a function to determine if it is a power of three. Follo ...
- AngularJs学习笔记3-服务及过滤器
距离上次别博客有有一段时间了,因为最近公司和个人事情比较多,也因为学习新的知识所以耽搁了,也有人说Angularjs1.5没有人用了,没必要分享,我个人感觉既然开头了我就坚持把他写完,对一些还在使用或 ...