DbUtils原始碼分析系列(一)
阿新 • • 發佈:2019-01-01
DbUtils原始碼結構
下面簡單描述一下每個包資訊:
org.apache.commons.dbutils.handlers
提供ResultSetHandler介面實現,預設提供了10種實現。
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>