设为首页 收藏本站
查看: 614|回复: 0

[经验分享] (转)Apache_Commons_DbUtils_快速上手

[复制链接]

尚未签到

发表于 2017-1-6 08:34:22 | 显示全部楼层 |阅读模式
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的支持。因此才产生了众多的开源数据库操作的框架和工具包。

 

二、熟悉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 nullauto_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、简单的数据库连接工具

packagestu.lavasoft.dbutils;

import java.sql.Connection;
importjava.sql.DriverManager;
importjava.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() {
                Connectionconn = 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

packagestu.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、测试类

packagestu.lavasoft.dbutils;

importorg.apache.commons.dbutils.DbUtils;
importorg.apache.commons.dbutils.QueryRunner;
importorg.apache.commons.dbutils.handlers.BeanListHandler;

import java.sql.Connection;
importjava.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()-------------");
                
//创建连接
                Connectionconn = ConnTools.makeConnection();
                
//创建SQL执行工具
                QueryRunnerqRunner =
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()-------------");
                
//创建连接
                Connectionconn = ConnTools.makeConnection();
                
//创建SQL执行工具
                QueryRunnerqRunner =
new QueryRunner();
                
//执行SQL查询,并获取结果
                List<User>list = (List<User>) qRunner.query(conn,
"select id,name,pswd from user", newBeanListHandler(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

 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-324466-1-1.html 上篇帖子: Apache + Tomcat 负载均衡与集群配置 下篇帖子: apache负载均衡和热备份
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表