`
panzertank
  • 浏览: 15508 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

(转)Apache_Commons_DbUtils_快速上手

    博客分类:
  • JDBC
 
阅读更多

 

http://java.chinaitlab.com/advance/796954_3.html

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

 

一、概述

 

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

 

对于JDBC 代码,存在很多问题,算是对Java的批判:

1 、操作过程复杂,代码操作一个模式,大量的重复。

2 、结果集难以处理,拿到一个ResultSet 干屁啊,一个一个度,转称JavaBean ,后来形成List ,太麻烦了。

3 、到处都强制检查SQLException ,烦不烦啊,影响代码的美观和可读性。

 

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

 

二、熟悉DBUtilsAPI

 

针对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 行转换为一个JavaBeanResultSetHandler 实现类
BeanListHandler
ResultSet 转换为List<JavaBean>ResultSetHandler 实现类
ColumnListHandler
ResultSet 的一个列转换为List<Object>ResultSetHandler 实现类
KeyedHandler
ResultSet 转换为Map<Map>ResultSetHandler 实现类
MapHandler
ResultSet 的首行转换为一个MapResultSetHandler 实现类
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 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

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics