天天看點

觀看學生成績系統代碼細節小結

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