当前位置:首页 > 开发 > 系统架构 > Apache > 正文

Apache Commons DbUtils 快速上手

发表于: 2011-10-15   作者:chenglinjava   来源:转载   浏览次数:
摘要: Apache Commons DbUtils 快速上手 Hibernate太复杂,iBatis不好用,JDBC代码太垃圾,DBUtils在简单与优美之间取得了完美平衡。 一、概述 DbUtils小巧的Java数据库操作工具,它在JDBC的基础上做了科学的封装,旨在简化JDBC代码混乱与重复。 对于JDBC代码,存在很多问题,算是对Java的批判: 1、操作过程复杂,代码操
Apache Commons DbUtils 快速上手

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<Object[]>的ResultSetHandler实现类
BeanHandler 将ResultSet行转换为一个JavaBean的ResultSetHandler实现类
BeanListHandler 将ResultSet转换为List<JavaBean>的ResultSetHandler实现类
ColumnListHandler 将ResultSet的一个列转换为List<Object>的ResultSetHandler实现类
KeyedHandler 将ResultSet转换为Map<Map>的ResultSetHandler实现类
MapHandler 将ResultSet的首行转换为一个Map的ResultSetHandler实现类
MapListHandler 将ResultSet转换为List<Map>的ResultSetHandler实现类
ScalarHandler 将ResultSet的一个列到一个对象。

3、------------------------------------
包org.apache.commons.dbutils.wrappers
        添加java.sql类中功能包装类。
类摘要
SqlNullCheckedResultSet 在每个getXXX方法上检查SQL NULL值的ResultSet包装类。
StringTrimmedResultSet 取出结果集中字符串左右空格的ResultSet包装类。

三、环境

Java5
commons-dbutils-1.2-bin.zip
mysql-noinstall-5.1.40-win32.zip
mysql-connector-java-5.1.10.zip

下载地址:
http://apache.freelamp.com/commons/dbutils/binaries/commons-dbutils-1.2-bin.zip
http://gd.tuwien.ac.at/db/mysql/Downloads/MySQL-5.1/mysql-noinstall-5.1.40-win32.zip
http://gd.tuwien.ac.at/db/mysql/Downloads/Connector-J/mysql-connector-java-5.1.10.zip

四、实例

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 */
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、实体Bean
package stu.lavasoft.dbutils;

/**
* 实体Bean
*
* @author */
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 */
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

Apache Commons DbUtils 快速上手

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
一、结构介绍 高层结构图: wrappers包: handlers包(部分): 二、功能介绍 commons.dbutils是一个
孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(四十一)——Apache的DBUtils框架学习
javaweb学习总结(四十一)——Apache的DBUtils框架学习 一、commons-dbutils简介    commons-dbut
一、commons-dbutils简介    commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是
一、commons-dbutils简介    commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是
在以前的项目中,经常用到Apache Commons Logging,因为它可以方便地切换不同的日志框架,并且可以
本文查阅方法: 1、查阅目录 —— 查阅本文目录,确定想要查阅的目录标题 2、快捷“查找” —— 在
本文查阅方法: 1、查阅目录 —— 查阅本文目录,确定想要查阅的目录标题 2、快捷“查找” —— 在
本文查阅方法: 1、查阅目录 —— 查阅本文目录,确定想要查阅的目录标题 2、快捷“查找” —— 在
参考资料 1 用Apache Commons Email简化邮件发送 http://www.blogjava.net/fastunit/archive/2008/01
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号