commons.dbutils1.2介绍及使用
一、结构介绍
高层结构图:

wrappers包:

handlers包(部分):

二、功能介绍
commons.dbutils是一个对JDBC操作进行封装的类集,其有如下几个优点:
(1)没有可能的资源泄漏,避免了繁锁的JDBC代码
(2)代码更整洁
(3)从ResultSet自动生成JavaBeans属性
(4)无其他依赖包
三、基本使用
基本用到的类有:QueryRunner、ResultSetHandler及其子类等
QueryRunner -- 执行查询的类,可以执行SELECT、INSERT、UPDATE、DELETE等语句,QueryRunner用ResultSetHandler的子类来处理ResultSet并返回结果;而包提供的ResultSetHandler子类使用RowProcessor的子类来处理ResultSet中的每一行;RowProcessor的默认实现为BasicRowProcessor;BeanProcessor不是RowProcessor,可以看作一个工具类
ResultHandler及其子类 -- 实现了Object handle(ResultSet rs) throws SQLException方法
AbstractListHandler -- 返回多行List的抽象类
ArrayHandler -- 返回一行的Object[]
ArrayListHandler -- 返回List,每行是Object[]
BeanHandler -- 返回第一个Bean对象
BeanListHandler -- 返回List,每行是Bean
ColumnListHandler -- 返回一列的List
KeyedHandler -- 返回Map,具体见代码
MapHandler -- 返回单个Map
MapListHandler -- 返回List,每行是Map
ScalarHandler -- 返回列的头一个值
代码:
- //建表语句
- DROP TABLE IF EXISTS `test`.`user`;
- CREATE TABLE `test`.`user` (
- `name` varchar(10) DEFAULT NULL,
- `password` varchar(10) DEFAULT NULL
- ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
- 表中数据
- 'user1', 'pwd1'
- 'user2', 'pwd2'
- //User类
- public class User {
- private String name;
- private String pwd;
- public User(){
- }
- public void setName(String val) {
- this.name = val;
- }
- public void setPassword(String val) {
- this.pwd = val;
- }
- public String getName() {
- return name;
- }
- public String getPassword() {
- return pwd;
- }
- }
- package dbutiltest;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.SQLException;
- import java.util.List;
- import java.util.Map;
- import org.apache.commons.dbutils.DbUtils;
- import org.apache.commons.dbutils.QueryRunner;
- import org.apache.commons.dbutils.ResultSetHandler;
- import org.apache.commons.dbutils.handlers.ArrayHandler;
- import org.apache.commons.dbutils.handlers.ArrayListHandler;
- import org.apache.commons.dbutils.handlers.BeanHandler;
- import org.apache.commons.dbutils.handlers.BeanListHandler;
- import org.apache.commons.dbutils.handlers.ColumnListHandler;
- import org.apache.commons.dbutils.handlers.KeyedHandler;
- import org.apache.commons.dbutils.handlers.MapListHandler;
- public class TestDbUtils {
- static {
- try {
- Class.forName("org.gjt.mm.mysql.Driver");
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- System.exit(1);
- }
- }
- public Connection getConnection() {
- Connection conn = null;
- try {
- conn = DriverManager.getConnection(
- "jdbc:mysql://localhost:3306/test", "root", "pwd");
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return conn;
- }
- public static void main(String[] args) {
- TestDbUtils u = new TestDbUtils();
- u.testArrayHandler();
- u.testArrayListHandler();
- u.testBeanListHandler();
- u.testMapListHandler();
- u.testColumnListHandler();
- u.testNonQuery();
- }
- public void testArrayHandler() {
- System.out.println("----testArrayHandler----");
- String sql = "select * from user";
- ResultSetHandler handler = new ArrayHandler();
- QueryRunner query = new QueryRunner();
- Connection conn = null;
- try {
- conn = getConnection();
- Object[] arr = (Object[])query.query(conn, sql, handler);
- for (int i = 0; i < arr.length; i++) {
- System.out.println(arr[i].toString());
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- try {
- DbUtils.close(conn);
- } catch (SQLException e) {
- // ignore
- }
- }
- }
- public void testArrayListHandler() {
- System.out.println("----testArrayListHandler----");
- String sql = "select * from user";
- ResultSetHandler handler = new ArrayListHandler();
- QueryRunner query = new QueryRunner();
- Connection conn = null;
- try {
- conn = getConnection();
- List list = (List)query.query(conn, sql, handler);
- for (int i = 0; i < list.size(); i++) {
- Object[] arr = (Object[])list.get(i);
- for (int j = 0; j < arr.length; j++) {
- System.out.print(arr[j] + " ");
- }
- System.out.println();
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- try {
- DbUtils.close(conn);
- } catch (SQLException e) {
- // ignore
- }
- }
- }
- public void testBeanListHandler() {
- System.out.println("----testBeanListHandler----");
- String sql = "select * from user where name=?";
- Object[] params = new Object[]{"user1"};
- ResultSetHandler handler = new BeanListHandler(User.class);
- QueryRunner query = new QueryRunner();
- Connection conn = null;
- try {
- conn = getConnection();
- List list = (List)query.query(conn, sql, params, handler);
- for (int i = 0; i < list.size(); i++) {
- User user = (User)list.get(i);
- System.out.println(user.getName() + " " + user.getPassword());
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- try {
- DbUtils.close(conn);
- } catch (SQLException e) {
- // ignore
- }
- }
- }
- public void testMapListHandler() {
- System.out.println("----testMapListHandler----");
- String sql = "select * from user where name=?";
- Object[] params = new Object[]{"user1"};
- ResultSetHandler handler = new MapListHandler();
- QueryRunner query = new QueryRunner();
- Connection conn = null;
- try {
- conn = getConnection();
- List list = (List)query.query(conn, sql, params, handler);
- for (int i = 0; i < list.size(); i++) {
- Map user = (Map)list.get(i);
- System.out.println(user.get("name") + " " + user.get("password"));
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- try {
- DbUtils.close(conn);
- } catch (SQLException e) {
- // ignore
- }
- }
- }
- public void testColumnListHandler() {
- System.out.println("----testColumnListHandler----");
- String sql = "select * from user";
- ResultSetHandler handler = new ColumnListHandler("name");
- QueryRunner query = new QueryRunner();
- Connection conn = null;
- try {
- conn = getConnection();
- List list = (List)query.query(conn, sql, handler);
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- try {
- DbUtils.close(conn);
- } catch (SQLException e) {
- // ignore
- }
- }
- }
- public void testKeyedHandler() {
- System.out.println("----testKeyedHandler----");
- String sql = "select * from user";
- ResultSetHandler handler = new KeyedHandler("name");
- QueryRunner query = new QueryRunner();
- Connection conn = null;
- try {
- conn = getConnection();
- Map map = (Map)query.query(conn, sql, handler);
- Map user = (Map)map.get("user2");
- System.out.println(user.get("password"));
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- try {
- DbUtils.close(conn);
- } catch (SQLException e) {
- // ignore
- }
- }
- }
- public void testNonQuery() {
- System.out.println("----testNonQuery----");
- String sql = "insert into `user` values('user_test','pwd_test')";
- QueryRunner query = new QueryRunner();
- Connection conn = null;
- try {
- conn = getConnection();
- query.update(conn, sql);
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- try {
- DbUtils.close(conn);
- } catch (SQLException e) {
- // ignore
- }
- }
- }
- }
关于wrappers包:
在新建 QueryRunner时,覆盖父类的方法wrap
- QueryRunner query = new QueryRunner() {
- protected ResultSet wrap(ResultSet rs) {
- return StringTrimmedResultSet.wrap(rs);
- }
- };
四、扩展
1.RowProcessor接口
2.ResultSetHandler接口
commons.dbutils1.2介绍及使用的更多相关文章
- Apache Commons 工具类介绍及简单使用
转自:http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下 ...
- Apache Commons 工具集介绍
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...
- Apache Commons 工具类介绍及简单使用(转载)
原文链接 http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动 ...
- Java:Apache Commons 工具类介绍及简单使用
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. Commons简介 组件 功能介绍 commo ...
- apache commons lang架包介绍
commons lang组件介绍和学习 介绍 Java语言开发时有一个隐患,那就是java支持null值,这就导致很多时候操作可能会出异常. 因此很多第三方组件都会提供安全null safe 操作(即 ...
- java中常用的工具类(三)
继续分享java中常用的一些工具类.前两篇的文章中有人评论使用Apache 的lang包和IO包,或者Google的Guava库.后续的我会加上的!谢谢支持IT江湖 一.连接数据库的综合类 ...
- java:工具类
Google guava工具类的介绍和使用:https://blog.csdn.net/wwwdc1012/article/details/82228458 Apache Commons 工具类介绍及 ...
- java常用工具类(三)
一.连接数据库的综合类 package com.itjh.javaUtil; import java.sql.Connection; import java.sql.DriverManager; im ...
- Java常用开源库
Java的经久不衰,很大程度上得益于Java的生态好.在日常开发中,我们也会经常使用到各种开源库和工具类,为了避免重复造轮子,本文将贴出工作及学习中会用到的部分开源库和工具类.Java的生态实在太大, ...
- Apache Commons介绍(转载)
一.Commons BeanUtils说明:针对Bean的一个工具集.由于Bean往往是有一堆get和set组成,所以BeanUtils也是在此基础上进行一些包装. 二.Commons CLI说明:这 ...
随机推荐
- 游戏AI行为决策——GOAP(目标导向型行动规划)
游戏AI行为决策--GOAP(附代码与项目) 新的一年即将到来,感觉还剩一种常见的游戏AI决策方法不讲的话,有些过意不去.就在这年的尾巴与大家一起交流下「目标导向型行为规划(GOAP)」吧! 另外,我 ...
- grid网格布局
https://ruanyifeng.com/blog/2019/03/grid-layout-tutorial.html Grid 布局只对项目生效 划分网格的线,称为"网格线" ...
- @vue/cli eslint插件使用指南
使用步骤 使用 npm 安装 @vue/cli-service 版本对应的 @vue/cli-plugin-eslint 例如:"@vue/cli-service": " ...
- linux操作系统和文件系统,命令(上)
Linux是一个类似于windows的操作系统 Linux操作系统的一种主要使用方式是通过终端软件:终端软件里只能使用键盘不能使用鼠标,在终端软件里通过输入命令完成各种任务 clear命令可以删除终端 ...
- Haproxy详解以及基于Haproxy的高可用实战
1.Haproxy与Keepalived VRRP 介绍 软件:haproxy 主要是做负载均衡的7层,也可以做4层负载均衡 apache也可以做7层负载均衡,但是很麻烦.实际工作中没有人用. ngi ...
- 使用 Docker 部署 MySql
前言 虽然不建议将需要持久化的数据保存在容器中,但是自己平时做个小项目玩玩还是没什么问题的. 拉取镜像 docker pull mysql 不加 tag 的话默认从 DockerHub 拉取最新版本的 ...
- Codeforces Round 977 (Div. 2)
手速局,因为水平不够三题遗憾离场. A. Meaning Mean 题意 你一个序列,你每次可以选择两个数删掉,并把他们的平均数加入到序列的末尾.当序列长度为 \(1\) 的时候,剩下的数最大值是多少 ...
- Redis数据库常见命令
Redis数据库常见命令 Linux启动Redis # 启动服务 redis-server # 开启客户端 redis-cli # 关闭redis服务 shutdown #查看服务是否运行 ping ...
- 2022年6月中国数据库排行榜:TiDB卷土重来摘桂冠,达梦蛰伏五月夺探花
排行榜风云又起,各产品墨坛论剑.2022年6月的 中国数据库流行度排行榜 再掀风云,6月排行榜共有231个数据库参与排名,两名新成员的加入,注入了新活力.本月排行榜用一句话可以概括为:TiDB卷土重来 ...
- url 统一资源定位符的组成
协议 protocol :http 或者 https = http + ssl 或者 file 文件(本地): 域名 host 或 ip 地址: 端口 port 省略默认 80 : 路径 path ...