1、關于org.apache.commons.dbutils中handlers.BeanListHandler<T>
部分源碼如下:
public List<Object> getList(Class type, String sql) {
QueryRunner qr = new QueryRunner(MysqlTool.getDataSource());
List<Object> list = new LinkedList<>();
try {
list = (List<Object>) qr.query(sql, new BeanListHandler(type));
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
1.1分類介紹
- ArrayHandler:把結果集中的第一行資料轉成對象數組。
- ArrayListHandler:把結果集中的每一行資料都轉成一個對象數組,再存放到List中。
- BeanHandler:将結果集中的第一行資料封裝到一個對應的JavaBean執行個體中。
- BeanListHandler:将結果集中的每一行資料都封裝到一個對應的JavaBean執行個體中,存放到List裡。
- ColumnListHandler:将結果集中某一列的資料存放到List中。
- KeyedHandler:将結果集中的每一行資料都封裝到一個Map裡,然後再根據指定的key把每個Map再存放到一個Map裡。
- MapHandler:将結果集中的第一行資料封裝到一個Map裡,key是列名,value就是對應的值。
- MapListHandler:将結果集中的每一行資料都封裝到一個Map裡,然後再存放到List。
- ScalarHandler:将結果集中某一條記錄的其中某一列的資料存成Object。
1.2BeanListHandler使用注意事項:
QueryRunner是用于接收資料庫使用的一個常用工具,可以大大提高資料庫處理的使用便利性。
主要來談一下QueryRunner中的query查詢的一些使用注意事項。
最常用的是BeanListHandler: 将結果集中的每一行資料都封裝到一個對應的JavaBean執行個體中,存放到List裡。
用法:qr.query(sql, new BeanListHandler(T.class));
需要注意的是,對應的JavaBean對象的屬性名應與資料庫查詢後的傳回值字段名相同(不區分大小寫),且對應的JavaBean中必須要有一個無參構造方法*,因為BeanListHandler是與對應 JavaBean中的各個字段的set方法對應,如果你隻存在有參構造方法時,無法通過無參構造方法建立對象再調用對應的set方法為各對應的屬性指派,進而導緻異常報錯。
2、項目中的iml檔案
2.1簡單說明
IDEA中的
.iml
檔案是項目辨別檔案,缺少了這個檔案,IDEA就無法識别項目。跟Eclipse的
.project
檔案性質是一樣的。并且這些檔案不同的裝置上的内容也會有差異,是以我們在管理項目的時候,
.project和.iml檔案都需要忽略掉
。
2.2生成iml檔案
方法一:
重新整理一下Maven Project就會自動生成.iml檔案,完成後就會自動生成.iml檔案。

方法二:
在缺少.iml檔案項目下運作
mvn idea:module
,完成後将自動生成.iml檔案
2.3對.project檔案和.iml檔案的比較
這兩個檔案都是項目辨別檔案,用于告訴編輯器這個目錄并不是一個普通的目錄,而是一個項目。我們會發現,Eclipse用普通導入項目的方式,在缺少.project檔案的情況下會找不到項目,無法正常的導入。但通過Maven的方式導入,則會自動生成.project。是以我們需要了解到,我們的開發工具有Maven插件,Maven其實對各個編輯器也内置了一些處理。可以用mvn idea,mvn eclipse這些指令對項目進行基礎資訊建構。這些基礎資訊存儲在類似.project、.iml檔案中供編輯器去讀取。
3、QueryRunner是什麼?
它是由DBUtils包提供的一個工具類,需要引入 commons-dbutils 依賴。
它與JdbcTemplate功能類似,該類簡單化了SQL查詢,與ResultSetHandler協同工作将使編碼量大為減少。
extends org.apache.commons.dbutils.AbstractQueryRunner
QueryRunner資料查詢方法:
/*
* QueryRunner資料查詢操作:
* 調用QueryRunner類方法query(Connection con,String sql,ResultSetHandler r, Object..params)
* ResultSetHandler r 結果集的處理方式,傳遞ResultSetHandler接口實作類
* Object..params SQL語句中的?占位符
*
* 注意: query方法傳回值,傳回的是T 泛型, 具體傳回值類型,跟随結果集處理方式變化
*/
public class QueryRunnerDemo1 {
private static Connection con = JDBCUtilsConfig.getConnection();
public static void main(String[] args) throws SQLException{
// arrayHandler();
arrayListHandler();
// beanHandler();
// beanListHander();
// columnListHandler();
// scalarHandler();
// mapHandler();
// mapListHandler();
}
/*
* 結果集第八種處理方法,MapListHandler
* 将結果集每一行存儲到Map集合,鍵:列名, 值:資料
* Map集合過多,存儲到List集合
*/
public static void mapListHandler()throws SQLException{
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort";
//調用方法query,傳遞結果集實作類MapListHandler
//傳回值List集合, 存儲的是Map集合
List<Map<String,Object>> list = qr.query(con, sql, new MapListHandler());
//周遊集合list
for( Map<String,Object> map : list ){
for(String key : map.keySet()){
System.out.print(key+"..."+map.get(key));// 根據key值得到 value值
}
System.out.println();
}
}
/*
* 結果集第七種處理方法,MapHandler
* 将結果集第一行資料,封裝到Map集合中
* Map<鍵,值> 鍵:列名 值:這列的資料
*/
public static void mapHandler()throws SQLException{
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort";
//調用方法query,傳遞結果集實作類MapHandler
//傳回值: Map集合,Map接口實作類, 泛型
Map<String,Object> map = qr.query(con, sql, new MapHandler());
//周遊Map集合
for(String key : map.keySet()){
System.out.println(key+" "+map.get(key));
}
}
/*
* 結果集第六種處理方法,ScalarHandler
* 對于查詢後,隻有1個結果
*/
public static void scalarHandler()throws SQLException{
QueryRunner qr = new QueryRunner();
String sql = "SELECT COUNT(*) FROM sort";
//調用方法query,傳遞結果集處理實作類ScalarHandler
long count = qr.query(con, sql, new ScalarHandler<Long>());
System.out.println(count);
}
/*
* 結果集第五種處理方法,ColumnListHandler
* 結果集,指定列的資料,存儲到List集合
* List<Object> 每個列資料類型不同
*/
public static void columnListHandler()throws SQLException{
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort ";
//調用方法 query,傳遞結果集實作類ColumnListHandler
//實作類構造方法中,使用字元串的列名
List<Object> list = qr.query(con, sql, new ColumnListHandler<Object>("sname"));
for(Object obj : list){
System.out.println(obj);
}
}
/*
* 結果集第四種處理方法, BeanListHandler
* 結果集每一行資料,封裝JavaBean對象
* 多個JavaBean對象,存儲到List集合
*/
public static void beanListHander()throws SQLException{
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort ";
//調用方法query,傳遞結果集處理實作類BeanListHandler
List<Sort> list = qr.query(con, sql, new BeanListHandler<Sort>(Sort.class));
for(Sort s : list){
System.out.println(s);
}
}
/*
* 結果集第三種處理方法,BeanHandler
* 将結果集的第一行資料,封裝成JavaBean對象
* 注意: 被封裝成資料到JavaBean對象, Sort類必須有空參數構造
*/
public static void beanHandler()throws SQLException{
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort ";
//調用方法,傳遞結果集實作類BeanHandler
//BeanHandler(Class<T> type)
Sort s = qr.query(con, sql, new BeanHandler<Sort>(Sort.class));
System.out.println(s);
}
/*
* 結果集第二種處理方法,ArrayListHandler
* 将結果集的每一行,封裝到對象數組中, 出現很多對象數組
* 對象數組存儲到List集合
*/
public static void arrayListHandler()throws SQLException{
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort";
//調用query方法,結果集處理的參數上,傳遞實作類ArrayListHandler
//方法傳回值 每行是一個對象數組,存儲到List
List<Object[]> result= qr.query(con, sql, new ArrayListHandler());
//集合的周遊
for( Object[] objs : result){
//周遊對象數組
for(Object obj : objs){
System.out.print(obj+" ");
}
System.out.println();
}
}
/*
* 結果集第一種處理方法, ArrayHandler
* 将結果集的第一行存儲到對象數組中 Object[]
*/
public static void arrayHandler()throws SQLException{
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort";
//調用方法query執行查詢,傳遞連接配接對象,SQL語句,結果集處理方式的實作類
//傳回對象數組
Object[] result = qr.query(con, sql, new ArrayHandler());
for(Object obj : result){
System.out.print(obj);
}
}
}
原文連結:https://blog.csdn.net/Turbo_Come/article/details/85332428