Hibernate太复杂,iBatis不好用,JDBC代码太垃圾,DBUtils在简单与优美之间取得了完美平衡。
DbUtils小巧的Java数据库操作工具,它在JDBC的基础上做了科学的封装,旨在简化JDBC代码混乱与重复。
对于JDBC代码,存在很多问题,算是对Java的批判:
2、结果集难以处理,拿到一个ResultSet干屁啊,一个一个度,转称JavaBean,后来形成List,太麻烦了。
3、到处都强制检查SQLException,烦不烦啊,影响代码的美观和可读性。
当然,以上的批判不是说JDBC设计不合理,二是缺乏更高层操作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包装类。
commons-dbutils-1.2-bin.zip
mysql-noinstall-5.1.40-win32.zip
mysql-connector-java-5.1.10.zip
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
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; } } 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 + '\'' +
'}';
}
}
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
本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/222771,如需转载请自行联系原作者