/**
  * ************************************************************************* 设置字段的查询类型
  *
  * @param queryType 查询类型
  * @param filedName 字段名称数组
  */
 public void setFiledQuery(String queryType, String... filedName) {
   if (StringUtils.isNotBlank(queryType) && !JFinalExtKit.isNullOrEmpty(filedName)) {
     Map<String, Object[]> map = conditionMap.get();
     map.put(queryType, filedName);
     conditionMap.set(map);
   }
 }
 /**
  * ************************************************************************* 设置需要排除的字段
  * setexcludeField
  *
  * @param filedName 参数说明
  */
 public void setExcludeField(String... filedName) {
   if (!JFinalExtKit.isNullOrEmpty(filedName)) {
     Map<String, String> map = excludeFieldMap.get();
     for (String str : filedName) {
       map.put(str, str);
     }
     excludeFieldMap.set(map);
   }
 }
 /**
  * 查询空值或者不为空值的情况 setNullFieldQuery
  *
  * @param queryType 参数说明
  * @param filedName 字段名
  */
 public void setNullOrNotNullFieldQuery(String queryType, String... filedName) {
   if (StringUtils.isNotBlank(queryType) && !JFinalExtKit.isNullOrEmpty(filedName)) {
     if (!QueryType.NOT_EMPTY.equals(queryType) && !QueryType.EMPTY.equals(queryType)) {
       log.error("空值或者非空查询的类型只能为:EMPTY、NOT_EMPTY");
       throw new RuntimeException("空值或者非空查询的类型只能为:EMPTY、NOT_EMPTY");
     }
     Map<String, Object[]> map = conditionMap.get();
     map.put(queryType, filedName);
     conditionMap.set(map);
   }
 }
 /**
  * ************************************************************************* 传值查询
  * 注:如果queryType为in或者not in那么filedValue必须为一个list对象
  *
  * @param queryType 查询类型
  * @param fieldName 字段名称
  * @param filedValue 字段值
  */
 public void setValueQuery(String queryType, String fieldName, Object filedValue) {
   if (StringUtils.isNotBlank(queryType)
       && StringUtils.isNotBlank(fieldName)
       && !JFinalExtKit.isNullOrEmpty(filedValue)) {
     Object[] param = new Object[2];
     param[0] = fieldName; // 字段名
     param[1] = filedValue; // 字段值
     Map<String, Object[]> map = conditionMap.get();
     map.put(queryType + "#" + fieldName, param); // 避免类型重复被覆盖掉就加上字段名
     conditionMap.set(map);
   }
 }
  /**
   * ************************************************************************* 用于生成SQL条件语句带别名
   *
   * @param modelClass 必须继承于Model
   * @param alias 别名
   */
  public void modelToCondition(Model<?> modelClass, String alias) {
    alias = StringUtils.isNotBlank(alias) ? alias + "." : "";
    if (modelClass != null) {
      // 所有的字段
      String[] fieldNames = modelClass.getAttrNames();
      // 字段名和值的map集合
      Map<String, Object> valueMap = JFinalExtKit.modelToMap(modelClass);

      // 构建查询条件
      buildCondition(alias, fieldNames, valueMap);
    } else {
      if (!conditionMap.get().isEmpty()) {
        buildCondition(alias, new String[] {}, new HashMap<String, Object>());
      } else {
        sql.set("");
        paramList.set(new ArrayList<Object>());
      }
    }
  }
 /**
  * ************************************************************************* 构建SQL语句
  *
  * @param sb 用于拼接SQL语句
  * @param queryType 查询类型
  * @param fieldName 字段名称
  * @param fieldValue 字段值
  * @param alias 别名
  */
 @SuppressWarnings("rawtypes")
 private void buildSQL(
     StringBuilder sb,
     String queryType,
     String fieldName,
     Object fieldValue,
     String alias,
     ArrayList<Object> params) {
   // 非空的时候进行设置
   if (!JFinalExtKit.isNullOrEmpty(fieldValue) && !JFinalExtKit.isNullOrEmpty(fieldName)) {
     if (QueryType.EQUAL.equals(queryType)) {
       sb.append(" and " + alias + fieldName + " = ? ");
       params.add(fieldValue);
     } else if (QueryType.NOT_EQUAL.equals(queryType)) {
       sb.append(" and " + alias + fieldName + " <> ? ");
       params.add(fieldValue);
     } else if (QueryType.LESS_THEN.equals(queryType)) {
       sb.append(" and " + alias + fieldName + " < ? ");
       params.add(fieldValue);
     } else if (QueryType.LESS_EQUAL.equals(queryType)) {
       sb.append(" and " + alias + fieldName + " <= ? ");
       params.add(fieldValue);
     } else if (QueryType.GREATER_THEN.equals(queryType)) {
       sb.append(" and " + alias + fieldName + " > ? ");
       params.add(fieldValue);
     } else if (QueryType.GREATER_EQUAL.equals(queryType)) {
       sb.append(" and " + alias + fieldName + " >= ? ");
       params.add(fieldValue);
     } else if (QueryType.FUZZY.equals(queryType)) {
       sb.append(" and " + alias + fieldName + " like ? ");
       params.add("%" + fieldValue + "%");
     } else if (QueryType.FUZZY_LEFT.equals(queryType)) {
       sb.append(" and " + alias + fieldName + " like ? ");
       params.add("%" + fieldValue);
     } else if (QueryType.FUZZY_RIGHT.equals(queryType)) {
       sb.append(" and " + alias + fieldName + " like ? ");
       params.add(fieldValue + "%");
     } else if (QueryType.IN.equals(queryType)) {
       try {
         List list = (List) fieldValue;
         StringBuffer instr = new StringBuffer();
         sb.append(" and " + alias + fieldName + " in (");
         for (Object obj : list) {
           instr.append(StringUtils.isNotBlank(instr) ? ",?" : "?");
           params.add(obj);
         }
         sb.append(instr + ") ");
       } catch (Exception e) {
         throw new RuntimeException(
             "使用IN条件的时候传入的值必须是个List对象,否则将会转换出错!例如将 in('1','2','3')中的'1','2','3'分为三个分别添加到List中做为值传入.",
             e);
       }
     } else if (QueryType.NOT_IN.equals(queryType)) {
       try {
         List list = (List) fieldValue;
         StringBuffer instr = new StringBuffer();
         sb.append(" and " + alias + fieldName + " not in (");
         for (Object obj : list) {
           instr.append(StringUtils.isNotBlank(instr) ? ",?" : "?");
           params.add(obj);
         }
         sb.append(instr + ") ");
       } catch (Exception e) {
         throw new RuntimeException(
             "使用NOT IN条件的时候传入的值必须是个List对象,否则将会转换出错!例如将 not in('1','2','3')中的'1','2','3'分为三个分别添加到List中做为值传入.",
             e);
       }
     }
   } else {
     if (QueryType.EMPTY.equals(queryType)) {
       sb.append(" and " + alias + fieldName + " is null ");
     } else if (QueryType.NOT_EMPTY.equals(queryType)) {
       sb.append(" and " + alias + fieldName + " is not null ");
     }
   }
 }