原文出处:http://lavasoft.blog.51cto.com/62575/222771

Hibernate太复杂,iBatis不好用,JDBC代码太垃圾,DBUtils在简单与优美之间取得了完美平衡。

一、概述

DbUtils小巧的Java数据库操作工具,它在JDBC的基础上做了科学的封装,旨在简化JDBC代码混乱与重复。

对于JDBC代码,存在很多问题,算是对Java的批判:
1、操作过程复杂,代码操作一个模式,大量的重复。
2、结果集难以处理,拿到一个ResultSet干屁啊,一个一个度,转称JavaBean,后来形成List,太麻烦了。
3、到处都强制检查SQLException,烦不烦啊,影响代码的美观和可读性。

当然,以上的批判不是说JDBC设计不合理,二是缺乏更高层操作API的支持。因此才产生了众多的开源数据库操作的框架和工具包。

二、熟悉DBUtils的API

针对DBUitlsAPI的包,做个简单的翻译,以便迅速掌握API的使用。
1、————————————
包org.apache.commons.dbutils
      DbUtils是一个为简化JDBC操作的小类库。  
接口摘要
      ResultSetHandler 将ResultSet转换为别的对象的工具。
      RowProcessor 将ResultSet行转换为别的对象的工具。
类摘要
      BasicRowProcessor RowProcessor接口的基本实现类。
      BeanProcessor BeanProcessor匹配列明到Bean属性名,并转换结果集列到Bean对象的属性中。
      
DbUtils 一个JDBC辅助工具集合。
ProxyFactory 产生JDBC接口的代理实现。
QueryLoader 属性文件加载器,主要用于加载属性文件中的 SQL 到内存中。
QueryRunner 使用可插拔的策略执行SQL查询并处理结果集。
ResultSetIterator 包装结果集为一个迭代器。

2、————————————
包org.apache.commons.dbutils.handlers
      ResultSetHandler接口的实现类
类摘要
   AbstractListHandler 将ResultSet转为List的抽象类
   ArrayHandler 将ResultSet转为一个Object[]的ResultSetHandler实现类
ArrayListHandler 将ResultSet转换为List

三、环境

Java jdk
commons-dbutils-**-bin.zip

下载地址:
https://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi

四、实例

1、sql脚本

create table user (
id int(11) not null auto_increment,
name varchar(50) character set latin1 not null,
pswd varchar(50) character set latin1 default null,
primary key (id)
) engine=MYISAM auto_increment=1 default charset=gbk

2、简单的数据库连接工具

package stu.lavasoft.dbutils; 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException; /**
* 随便写个数据库连接获取工具,凑合着把例子跑起来
*
* @author leizhimin 2009-11-6 14:48:22
*/
public class ConnTools {
private static String dirverClassName = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://192.168.104.101:3306/testdb?useUnicode=true&characterEncoding=utf8";
private static String user = "root";
private static String password = "leizhimin"; public static Connection makeConnection() {
Connection conn = null;
try {
Class.forName(dirverClassName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
}

3、实体Bpackage stu.lavasoft.dbutils;

/**
* 实体Bean
*
* @author leizhimin 2009-11-6 16:05:41
*/
public class User {
private int id;
private String name;
private String pswd; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPswd() {
return pswd;
} public void setPswd(String pswd) {
this.pswd = pswd;
} @Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pswd='" + pswd + '\'' +
'}';
}
}

4、测试类

package stu.lavasoft.dbutils; 

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler; import java.sql.Connection;
import java.sql.SQLException;
import java.util.List; /**
* DbUtils入门
*
* @author leizhimin 2009-11-6 14:47:26
*/
public class Test1 {
public static void main(String[] args) throws SQLException {
test_insert();
test_find();
} public static void test_insert() throws SQLException {
System.out.println("-------------test_insert()-------------");
//创建连接
Connection conn = ConnTools.makeConnection();
//创建SQL执行工具
QueryRunner qRunner = new QueryRunner();
//执行SQL插入
int n = qRunner.update(conn, "insert into user(name,pswd) values('iii','iii')");
System.out.println("成功插入" + n + "条数据!");
//关闭数据库连接
DbUtils.closeQuietly(conn);
} public static void test_find() throws SQLException {
System.out.println("-------------test_find()-------------");
//创建连接
Connection conn = ConnTools.makeConnection();
//创建SQL执行工具
QueryRunner qRunner = new QueryRunner();
//执行SQL查询,并获取结果
List<User> list = (List<User>) qRunner.query(conn, "select id,name,pswd from user", new BeanListHandler(User.class));
//输出查询结果
for (User user : list) {
System.out.println(user);
}
//关闭数据库连接
DbUtils.closeQuietly(conn);
}
}

执行结果:
————-test_insert()————-
成功插入1条数据!
————-test_find()————-
User{id=4, name=’bbb’, pswd=’bbb’}
User{id=3, name=’aaa’, pswd=’bbb’}
User{id=5, name=’iii’, pswd=’iii’}
User{id=6, name=’iii’, pswd=’iii’}

Process finished with exit code 0

本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/222771

Apache Commons DbUtils 快速上手的更多相关文章

  1. 高性能jdbc封装工具 Apache Commons DbUtils 1.6(转载)

    转载自原文地址:http://gao-xianglong.iteye.com/blog/2166444 前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更多的 ...

  2. 写一个ORM框架的第一步(Apache Commons DbUtils)

    新一次的内部提升开始了,如果您想写一个框架从Apache Commons DbUtils开始学习是一种不错的选择,我们先学习应用这个小“框架”再把源代码理解,然后写一个属于自己的ORM框架不是梦. 一 ...

  3. java JDBC (七) org.apache.commons.dbutils 查询

    package cn.sasa.demo1; import java.sql.Connection; import java.sql.SQLException; import java.util.Li ...

  4. java JDBC (六) org.apache.commons.dbutils 增删改

    dbutils是apache封装了JDBC的工具类,比mysql-connector更方便些 下载地址:http://commons.apache.org/proper/commons-dbutils ...

  5. Java连接数据库 #04# Apache Commons DbUtils

    索引 通过一个简单的调用看整体结构 Examples 修改JAVA连接数据库#03#中的代码 DbUtils并非是什么ORM框架,只是对原始的JDBC进行了一些封装,以便我们少写一些重复代码.就“用” ...

  6. 《笔者带你剖析Apache Commons DbUtils 1.6》(转)

    前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更 多的是依靠Hibernate.Ibatis.Spring JDBC.JPA等大厂提供的持久层技术解决方案, ...

  7. java.lang.ClassNotFoundException: org.apache.commons.dbutils.QueryRunner

    七月 28, 2017 11:06:33 下午 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() fo ...

  8. 模拟apache commons dbutils 实现自己的BeanListHandler(回调应用)

    首先dbcp相关的jar包和MySQL的驱动包导入到项目中. dbcp.properties配置文件如下,并放到项目根目录下. driverClassName=com.mysql.jdbc.Drive ...

  9. java.lang.ClassNotFoundException: org.apache.commons.dbutils.ResultSetHandle

    原因是这两个地方都得导入dbutils的jar包,一般出错是因为WEB-INF下没有导入包,记得导入,然后buildPath即可

随机推荐

  1. Openjudge-NOI题库-出书最多

    描述 假定图书馆新进了m(10 ≤ m ≤ 999)本图书,它们都是由n(2 ≤ n ≤ 26)个作者独立或相互合作编著的.假设m本图书编号为整数(1到999),作者的姓名为字母('A'到'Z'),请 ...

  2. centos6 搭建hdwiki

    前期准备:安装好Mysql+apache+PHP,测试apache能够解析index.php文件后就可以. 用户名 xiaohe 密码 123456 #### mysql安装好后: adduser w ...

  3. 坑爹的 Hardware Reserved Memory (查看内存等)

    来源: http://blog.sina.com.cn/s/blog_772645ff0100s4t7.html 我的电脑是GatewayNV49C83c,酷睿i3的CPU和NV的独立显卡 Inter ...

  4. 如何阅读一本书([美] 莫提默·J. 艾德勒 / 查尔斯·范多伦 )

               进入豆瓣读书 前言 2017年1月2日跟着熊猫书院开始了为期十月的阅读计划. 熊猫书院是一个微信公众号,但仅对熊猫书院学员开放.它是一个很好的读书产品,从入学申请.入学报到.班长 ...

  5. 将图片设置给ImageView时的属性配置

    将图片设置给ImageView的时候,由于图片大小和逻辑需求的不确定会造成实际产生的效果和我们实际的需求不符的情况,这时需要对imageVIew控件添加scaleType属性,下面我用两张图片帮大家轻 ...

  6. fragment类onresume里面刷新操作处理

    今天项目中涉及fragment中嵌套多个fragment,但是要根据tag去展示对应的fragment,而不是默认展示的第一个fragment,如果使用activity很容易想到onpause(),o ...

  7. android 图片加载优化,避免oom问题产生

    1,及时回收bitmap,在activity的onstop()和onDestory()里面调用如下代码进行bitmap的回收: // 先判断是否已经回收 if(bitmap != null & ...

  8. Office在线预览及PDF在线预览的实现方式大集合

    一.服务器先转换为PDF,再转换为SWF,最后通过网页加载Flash预览 微软方:利用Office2007以上版本的一个PDF插件SaveAsPDFandXPS.exe可以导出PDF文件,然后再利用免 ...

  9. 大数据时代之hadoop(六):hadoop 生态圈(pig,hive,hbase,ZooKeeper,Sqoop)

    hadoop是有apache基金会所开发的分布式系统基础架构,其主要提供了两方面的功能:分布式存储和分布式计算. 其中分布式存储是分布式计算的基础,在hadoop的实现里面,提供了分布式存储的接口,并 ...

  10. C#的面向对象

    一.面向对象编程(OOP)是将现实中的事物抽象花,其设计的重点就是类的设计. 二.类是面向对象编程的设计核心,实际上是一种复杂的数据类型.将不同类型的数据和与这些数据就相关的操作封装在一起,就构成类. ...