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; }
感谢您的阅读,您的支持是我写博客动力。