1. 程式人生 > >DbUtils原始碼分析系列(一)

DbUtils原始碼分析系列(一)

DbUtils原始碼結構

DbUtils原始碼結構圖
下面簡單描述一下每個包資訊:
org.apache.commons.dbutils.handlers
提供ResultSetHandler介面實現,預設提供了10種實現。
提供的ResultSetHandler實現類

ResultSetHandler實現類 描述
ArrayHandler 把結果集中的第一行資料轉成Object陣列
ArrayListHandler 把結果集中的每一行資料都轉成一個Object陣列,再存放到List中
BeanHandler 將結果集中的第一行資料轉成一個JavaBean例項
BeanListHandler 將結果集中的每一行資料都轉成一個JavaBean例項,存放到List中
BeanMapHandler 將結果集中的每一行資料都轉成一個JavaBean例項,並指定某一列對應的值作為Key,存放到Map中
ColumnListHandler 將結果集中某一列的資料存放到List中
KeyedHandler 將結果集中的每一行資料都封裝到一個Map裡,key是列名,再把這些Map存到另一個Map裡,這個Map的Key為指定的某一個列對應的值
MapHandler 將結果集中的第一行資料封裝到一個Map裡,Key是列名,Value就是對應的值
MapListHandler 將結果集中的每一行資料都封裝到一個Map裡,Key是列名,然後再將Map存放到List
ScalarHandler 將結果集中的第一行的某一列轉換成指定的Object

org.apache.commons.dbutils.wrappers
提供對java.sql.*類的包裝功能。預設利用JDK動態代理功能提供了兩個包裝器:

包裝器 描述
SqlNullCheckedResultSet 包裝一個結果集,使getString和getObject方法返回的String為trim String
StringTrimmedResultSet 包裝一個結果集,檢查getXXX方法返回值。如果不為空,直接返回列值;如果列值為空,預設返回java預設值或者該例項中指定的值

org.apache.commons.dbutils
這個包中包含了DbUtils核心類和介面—— 其中DbUtils, QueryRunner and the ResultSetHandler 介面是我們首先應該關注的。後文將做詳細分析。

測試依賴

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <version>1.9.5</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest-all</artifactId>
      <version>1.3</version>
      <scope>test</scope>
    </dependency>
  </dependencies>