zoukankan      html  css  js  c++  java
  • [转载]Apache Commons DbUtils 快速上手

    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
     
    下载地址:
     
    四、实例
     
    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,的确方便多了。
  • 相关阅读:
    C#代码也VB
    Flash/Flex学习笔记(9):ActionScript3.0与Javascript的相互调用
    原来Silverlight 4中是可以玩UDP的!
    Flash/Flex学习笔记(20):贝塞尔曲线
    Flash/Flex学习笔记(16):如何做自定义Loading加载其它swf
    AS3:让人叹为观止的Flash作品
    Flash/Flex学习笔记(10):FMS 3.5之Hello World!
    Flash/Flex学习笔记(12):FMS 3.5之如何做视频实时直播
    Flash/Flex学习笔记(28):动态文本的滚动控制
    Flash/Flex学习笔记(18):画线及三角函数的基本使用
  • 原文地址:https://www.cnblogs.com/yinger/p/2172841.html
Copyright © 2011-2022 走看看