/** * ************************************************************************* 设置字段的查询类型 * * @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 "); } } }