熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Apache Commons DbUtils 快速上手

2022-06-13   來源: Java核心技術 

Hibernate太復雜iBatis不好用JDBC代碼太垃圾DBUtils在簡單與優美之間取得了完美平衡
 
概述
 
DbUtils小巧的Java數據庫操作工具它在JDBC的基礎上做了科學的封裝旨在簡化JDBC代碼混亂與重復
 
對於JDBC代碼存在很多問題算是對Java的批判
操作過程復雜代碼操作一個模式大量的重復
結果集難以處理拿到一個ResultSet干屁啊一個一個度轉稱JavaBean後來形成List太麻煩了
到處都強制檢查SQLException煩不煩啊影響代碼的美觀和可讀性
 
當然以上的批判不是說JDBC設計不合理二是缺乏更高層操作API的支持因此才產生了眾多的開源數據庫操作的框架和工具包
 
熟悉DBUtils的API
 
針對DBUitlsAPI的包做個簡單的翻譯以便迅速掌握API的使用



包monsdbutils
        DbUtils是一個為簡化JDBC操作的小類庫
接口摘要
ResultSetHandler 將ResultSet轉換為別的對象的工具
RowProcessor 將ResultSet行轉換為別的對象的工具 
類摘要
BasicRowProcessor RowProcessor接口的基本實現類
BeanProcessor BeanProcessor匹配列明到Bean屬性名並轉換結果集列到Bean對象的屬性中
DbUtils 一個JDBC輔助工具集合
ProxyFactory 產生JDBC接口的代理實現
QueryLoader 屬性文件加載器主要用於加載屬性文件中的 SQL 到內存中
QueryRunner 使用可插拔的策略執行SQL查詢並處理結果集
ResultSetIterator 包裝結果集為一個迭代器
 

包monsdbutilshandlers
        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的一個列到一個對象
 

包monsdbutilswrappers
        添加javasql類中功能包裝類
類摘要
SqlNullCheckedResultSet 在每個getXXX方法上檢查SQL NULL值的ResultSet包裝類
StringTrimmedResultSet 取出結果集中字符串左右空格的ResultSet包裝類

 
環境
 
Java
commonsdbutilsbinzip
mysqlnoinstallwinzip
mysqlconnectorjavazip
 
下載地址
dbutilsbinzip
/mysqlnoinstallwinzip
J/mysqlconnectorjavazip


 
 
實例
 
sql腳本


create table user (                                                                        
                    id int() not null auto_increment                                    
                    name varchar() character set latin not null            
                    pswd varchar() character set latin default null    
                    primary key (id)                                                                            
                ) engine=MYISAM auto_increment= default charset=gbk
 
簡單的數據庫連接工具

package stulavasoftdbutils;

import javasqlConnection;
import javasqlDriverManager;
import javasqlSQLException;

/**
* 隨便寫個數據庫連接獲取工具湊合著把例子跑起來
*
* @author leizhimin ::
*/
public class ConnTools {
        private static String dirverClassName = commysqljdbcDriver;
        private static String url = jdbc:mysql://:/testdb?useUnicode=true&characterEncoding=utf;
        private static String user = root;
        private static String password = leizhimin;

        public static Connection makeConnection() {
                Connection conn = null;
                try {
                        ClassforName(dirverClassName);
                } catch (ClassNotFoundException e) {
                        eprintStackTrace();
                }
                try {
                        conn = DriverManagergetConnection(url user password);
                } catch (SQLException e) {
                        eprintStackTrace();
                }
                return conn;
        }
}
 
實體Bean

package stulavasoftdbutils;

/**
* 實體Bean
*
* @author leizhimin ::
*/
public class User {
        private int id;
        private String name;
        private String pswd;

        public int getId() {
                return id;
        }

        public void setId(int id) {
                thisid = id;
        }

        public String getName() {
                return name;
        }

        public void setName(String name) {
                thisname = name;
        }

        public String getPswd() {
                return pswd;
        }

        public void setPswd(String pswd) {
                thispswd = pswd;
        }

        @Override
        public String toString() {
                return User{ +
                                id= + id +
                                 name= + name + \ +
                                 pswd= + pswd + \ +
                                };
        }
}


 
 
測試類

package stulavasoftdbutils;

import monsdbutilsDbUtils;
import monsdbutilsQueryRunner;
import monsdbutilshandlersBeanListHandler;

import javasqlConnection;
import javasqlSQLException;
import javautilList;

/**
* DbUtils入門
*
* @author leizhimin ::
*/
public class Test {
        public static void main(String[] args) throws SQLException {
                test_insert();
                test_find();
        }

        public static void test_insert() throws SQLException {
                Systemoutprintln(test_insert());
                //創建連接
                Connection conn = ConnToolsmakeConnection();
                //創建SQL執行工具
                QueryRunner qRunner = new QueryRunner();
                //執行SQL插入
                int n = qRunnerupdate(conn insert into user(namepswd) values(iiiiii));
                Systemoutprintln(成功插入 + n + 條數據!);
                //關閉數據庫連接
                DbUtilscloseQuietly(conn);
        }

        public static void test_find() throws SQLException {
                Systemoutprintln(test_find());
                //創建連接
                Connection conn = ConnToolsmakeConnection();
                //創建SQL執行工具
                QueryRunner qRunner = new QueryRunner();
                //執行SQL查詢並獲取結果
                List<User> list = (List<User>) qRunnerquery(conn select idnamepswd from user new BeanListHandler(Userclass));
                //輸出查詢結果
                for (User user : list) {
                        Systemoutprintln(user);
                }
                //關閉數據庫連接
                DbUtilscloseQuietly(conn);
        }
}
 
執行結果

test_insert()
成功插入條數據!
test_find()
User{id= name=bbb pswd=bbb}
User{id= name=aaa pswd=bbb}
User{id= name=iii pswd=iii}
User{id= name=iii pswd=iii}

Process finished with exit code
 
呵呵相比JDBC的確方便多了
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26220.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.