Apache Commons DbUtils 快速上手

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:
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
 
下载地址:
 
四、实例
 
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、实体Bean
package 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
 
呵呵。相比JDBC,的确方便多了。


本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/222771,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
Apache
java.lang.NoClassDefFoundError: org/apache/commons/io/output/UnsynchronizedByteArrayOutputStream
java.lang.NoClassDefFoundError: org/apache/commons/io/output/UnsynchronizedByteArrayOutputStream
569 0
|
Java Apache Maven
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory解决方法
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory解决方法
1348 0
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory解决方法
|
5月前
|
Java 数据库连接 Apache
深入理解Apache Commons Pool2池化技术
深入理解Apache Commons Pool2池化技术
|
6月前
|
算法 Java Apache
Apache Commons
Apache Commons是一个开源项目,提供了一系列的工具和库,用于简化Java开发中的常见任务。
68 1
|
移动开发 前端开发 Java
Spring MVC-09循序渐进之文件上传(基于Apache Commons FileUpload)
Spring MVC-09循序渐进之文件上传(基于Apache Commons FileUpload)
104 0
|
Java 应用服务中间件 Apache
nested exception is java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntim
nested exception is java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntim
364 0
|
Java Apache
java.lang.NoClassDefFoundError:org/apache/commons/logging/LogFactory
java.lang.NoClassDefFoundError:org/apache/commons/logging/LogFactory
106 0
|
druid Apache 数据库
|
存储 Java Apache
java积累——apache commons fileupload 实现文件上传
java积累——apache commons fileupload 实现文件上传
369 0
|
Apache
Apache Commons DbUtils工具使用
Apache Commons DbUtils工具使用
151 0
Apache Commons DbUtils工具使用

推荐镜像

更多
下一篇
无影云桌面