zoukankan      html  css  js  c++  java
  • jfinal对象封装Record原理

     
    
     
    
    /*DbPro.class*/
    
    public transient Record findFirst(String sql, Object paras[]{
    List result = find(sql, paras);
    return result.size() <= 0 ? null : (Record)result.get(0);
    }
    
    
    public transient List find(String sql, Object paras[])
    {
    Connection conn = null;
    List list;
    try
    {
    conn = config.getConnection();
    list = find(config, conn, sql, paras);
    }
    catch(Exception e)
    {
    throw new ActiveRecordException(e);
    }
    config.close(conn);
    return list;
    Exception exception;
    exception;
    config.close(conn);
    throw exception;
    }
    
    
    transient List find(Config config, Connection conn, String sql, Object paras[])
    throws SQLException
    {
    PreparedStatement pst = conn.prepareStatement(sql);
    config.dialect.fillStatement(pst, paras);
    ResultSet rs = pst.executeQuery();
    List result = RecordBuilder.build(config, rs);   //返回List<Record>
    DbKit.closeQuietly(rs, pst);
    return result;
    }
    
    
    /*RecordBuilder.class
    *把一条记录对象封装Record对象
    */
    public static final List build(Config config, ResultSet rs)
    throws SQLException
    {
    List result = new ArrayList();
    ResultSetMetaData rsmd = rs.getMetaData();
    int columnCount = rsmd.getColumnCount();
    String labelNames[] = new String[columnCount + 1];
    int types[] = new int[columnCount + 1];
    buildLabelNamesAndTypes(rsmd, labelNames, types);
    Record record;
    for(; rs.next(); result.add(record))
    {
    record = new Record();
    record.setColumnsMap(config.containerFactory.getColumnsMap());
    Map columns = record.getColumns();
    for(int i = 1; i <= columnCount; i++)
    {
    Object value;
    if(types[i] < 2004)
    value = rs.getObject(i);
    else
    if(types[i] == 2005)
    value = ModelBuilder.handleClob(rs.getClob(i));
    else
    if(types[i] == 2011)
    value = ModelBuilder.handleClob(rs.getNClob(i));
    else
    if(types[i] == 2004)
    value = ModelBuilder.handleBlob(rs.getBlob(i));
    else
    value = rs.getObject(i);
    columns.put(labelNames[i], value);
    }
    
    }
    
    return result;
    }
    
      
      
    

      

  • 相关阅读:
    LeetCode 40. 组合总和 II(Combination Sum II)
    LeetCode 129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)
    LeetCode 60. 第k个排列(Permutation Sequence)
    LeetCode 47. 全排列 II(Permutations II)
    LeetCode 46. 全排列(Permutations)
    LeetCode 93. 复原IP地址(Restore IP Addresses)
    LeetCode 98. 验证二叉搜索树(Validate Binary Search Tree)
    LeetCode 59. 螺旋矩阵 II(Spiral Matrix II)
    一重指针和二重指针
    指针的意义
  • 原文地址:https://www.cnblogs.com/chenweichu/p/5946078.html
Copyright © 2011-2022 走看看