code: private static String joinAndGetValueForInsert(List<Field> fields, String sep, String fieldPrefix,
  			List<Object> values, Object obj, boolean isWithNullValue) {
  		if(values == null || obj == null) {
  			throw new InvalidParameterException("joinAndGetValueForInsert require values and obj");
  		}
  		
          fieldPrefix = fieldPrefix == null ? "" : fieldPrefix.trim();
  
      	StringBuilder sb = new StringBuilder();
      	for(Field field : fields) {
      		Column column = field.getAnnotation(Column.class);
      		if(!(column.computed().trim().isEmpty())) {
      			continue; // insert不加入computed字段
      		}
  
  			Object value = DOInfoReader.getValue(field, obj);
  			if(value != null && column.isJSON()) {
  				value = JSON.toJson(value);
  			}
  			if(isWithNullValue) {
  				values.add(value);
  			} else {
  				if(value == null) {
  					continue; // 不加入该column
  				} else {
  					values.add(value);
  				}
  			}
      		
          	sb.append(fieldPrefix).append(getColumnName(column)).append(sep);
      	}
      	int len = sb.length();
      	return len == 0 ? "" : sb.toString().substring(0, len - 1);
  	}
docs: 拼凑字段逗号,分隔子句（用于insert），并把参数obj的值放到values中。会排除掉computed的@Column字段
  
  @param fields
  @param sep
  @param fieldPrefix
  @param values 不应该为null
  @param obj 不应该为null
  @param isWithNullValue 是否把null值放到values中
  @return