Exemplo n.º 1
0
 public <T> List<T> select(
     Class<T> clazz, String query, Map<String, Object> params, Integer offset, Integer limit)
     throws SQLException, InstantiationException, IllegalAccessException {
   List<T> resultList = new ArrayList<T>();
   List<Object> paramList = new ArrayList<Object>();
   // add offset and limit
   addRange(query, params, offset, limit);
   Pattern pattern = Pattern.compile("/#[\\0x20-0x7F]+?[\\0x20-0x7F]#/", Pattern.DOTALL);
   Matcher matcher = pattern.matcher(query);
   while (matcher.find()) {
     int start = matcher.start();
     int end = matcher.end();
     Object param = params.get(query.substring(start + 2, end - 2).trim());
     query = query.substring(0, start) + "?" + query.substring(end, query.length());
     paramList.add(params.get(param));
   }
   PreparedStatement stmt = this.connection.prepareStatement(query);
   setParameter(stmt, paramList);
   ResultSet rs = stmt.executeQuery();
   ResultSetMetaData meta = rs.getMetaData();
   Map<String, ColumnInfo> columnMap = new HashMap<String, ColumnInfo>();
   int columnLength = meta.getColumnCount();
   for (int i = 0; i < columnLength; i++) {
     ColumnInfo columnInfo = new ColumnInfo();
     columnInfo.setColumnName(meta.getColumnLabel(i));
     columnInfo.setColumnType(meta.getColumnTypeName(i));
     columnInfo.setColumnClass(meta.getColumnClassName(i));
     columnMap.put(columnInfo.getColumnName(), columnInfo);
   }
   while (rs.next()) {
     T entity = clazz.newInstance();
     Field[] fields = clazz.getFields();
     for (Field field : fields) {
       ColumnInfo columnInfo = columnMap.get(field.getAnnotation(Column.class).name());
       if (columnInfo != null) {
         if (String.class.getName().equals(columnInfo.getColumnClass())) {
           field.set(entity, rs.getString(columnInfo.getColumnName()));
         } else if (Integer.class.getName().equals(columnInfo.getColumnClass())) {
           field.set(entity, rs.getInt(columnInfo.getColumnName()));
         } else if (Double.class.getName().equals(columnInfo.getColumnClass())) {
           field.set(entity, rs.getDouble(columnInfo.getColumnName()));
         } else if (Long.class.getName().equals(columnInfo.getColumnClass())) {
           field.set(entity, rs.getLong(columnInfo.getColumnName()));
         } else if (Float.class.getName().equals(columnInfo.getColumnClass())) {
           field.set(entity, rs.getFloat(columnInfo.getColumnName()));
         } else if (Short.class.getName().equals(columnInfo.getColumnClass())) {
           field.set(entity, rs.getShort(columnInfo.getColumnName()));
         } else if (Byte.class.getName().equals(columnInfo.getColumnClass())) {
           field.set(entity, rs.getByte(columnInfo.getColumnName()));
         } else if (Boolean.class.getName().equals(columnInfo.getColumnClass())) {
           field.set(entity, rs.getBoolean(columnInfo.getColumnName()));
         } else if (Date.class.getName().equals(columnInfo.getColumnClass())) {
           field.set(entity, rs.getDate(columnInfo.getColumnName()));
         } else if (Timestamp.class.getName().equals(columnInfo.getColumnClass())) {
           field.set(entity, rs.getTimestamp(columnInfo.getColumnName()));
         } else if (Object.class.getName().equals(columnInfo.getColumnClass())) {
           field.set(entity, rs.getObject(columnInfo.getColumnName()));
         }
       }
     }
     resultList.add(entity);
   }
   return resultList;
 }