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,的确方便多了。
  • 相关阅读:
    Discuz X 2.5 点点(伪静态)
    jq 、xml 省市级联动
    php memcache 初级使用(2)
    关于windows虚拟内存管理的页目录自映射
    SharePoint 2010 网络上的开发经验和资源
    SharePoint 2010 Reporting Services 报表服务器正在内置 NT AUTHORITY\SYSTEM 账户下运行 解决方法
    SharePoint 2010 Reporting Services 报表服务器无法解密用于访问报表服务器数据库中的敏感数据或加密数据的对称密钥 解决方法
    Active Directory Rights Management Services (AD RMS)无法检索证书层次结构。 解决方法
    SharePoint 2010 Reporting Services 报表服务器实例没有正确配置 解决方法
    SharePoint 2010 页面引用 Reporting Services 展现 List 报表
  • 原文地址:https://www.cnblogs.com/yinger/p/2172841.html
Copyright © 2011-2022 走看看