`
jay_kid
  • 浏览: 63830 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

paste

阅读更多

package com.jay.sql.builder;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import com.jay.sql.builder.vo.ParameterizedSQL;
import com.jay.sql.builder.vo.TradeFilter;

public class SQLConditionBuilder {

    public static ParameterizedSQL buildSQL(TradeFilter filter) {
	Map<String, Object> paramMap = new HashMap<String, Object>();
	String conditionSQL = buildConditionSQL(paramMap, filter);

	ParameterizedSQL parameterizedSQL = new ParameterizedSQL("select * from trade_event where");
	parameterizedSQL.appendSQL(conditionSQL);
	parameterizedSQL.addParam(paramMap);

	return parameterizedSQL;
    }

    private static String buildConditionSQL(Map<String, Object> paramMap, TradeFilter filter) {
	Collection<String> sqlSegments = getCurrentLayerConditionSQL(paramMap, filter);
	return joinByAND(sqlSegments);
    }

    private static String joinByAND(Collection<String> sqlSegments) {
	StringBuilder builder = new StringBuilder();

	if (sqlSegments.size() == 1) {
	    for (String sql : sqlSegments) {
		builder.append(sql);
	    }
	} else {
	    for (String sql : sqlSegments) {
		builder.append("(").append(sql).append(")").append(" AND ");
	    }
	    removeEndKeyWord(builder, " AND ");
	}
	return builder.toString();
    }

    private static void removeEndKeyWord(StringBuilder builder, String keyWord) {
	if (builder.lastIndexOf(keyWord) == builder.length() - keyWord.length()) {
	    builder.delete(builder.length() - keyWord.length(), builder.length());
	}
    }

    public static Collection<String> getCurrentLayerConditionSQL(Map<String, Object> paramMap, TradeFilter filter) {
	Collection<String> currentLayerCondition = new ArrayList<String>();

	enrich(paramMap, currentLayerCondition, "trade_event.client_id", "=", filter.getClientID());
	enrich(paramMap, currentLayerCondition, "trade_event.system_id", "=", filter.getSystemID());
	enrich(paramMap, currentLayerCondition, "trade_event.client_platform", "=", filter.getClientPlatform());
	enrich(paramMap, currentLayerCondition, "trade_event.po_group", "=", filter.getPOGroup());
	enrich(paramMap, currentLayerCondition, "trade_event.counterParty", "=", filter.getCounterParty());

	Collection<Collection<TradeFilter>> anyTradeFilters = filter.getAnyTradeFilters();
	for (Collection<TradeFilter> anyTradeFilter : anyTradeFilters) {
	    String sql = joinByOR(paramMap, anyTradeFilter);
	    currentLayerCondition.add(sql);
	}

	return currentLayerCondition;
    }

    private static void enrich(Map<String, Object> paramMap, Collection<String> currentLayerCondition, String columeName, String comparator, String value) {
	if (value == null) {
	    return;
	}
	currentLayerCondition.add(new StringBuilder().append(columeName).append(comparator).append(":").append(columeName).toString());
	paramMap.put(":" + columeName, value);
    }

    private static String joinByOR(Map<String, Object> paramMap, Collection<TradeFilter> anyTradeFilter) {
	StringBuilder builder = new StringBuilder();

	if (anyTradeFilter.size() == 1) {
	    for (TradeFilter orFilter : anyTradeFilter) {
		builder.append(buildConditionSQL(paramMap, orFilter));
	    }
	} else {
	    for (TradeFilter orFilter : anyTradeFilter) {
		builder.append("(").append(buildConditionSQL(paramMap, orFilter)).append(")").append(" OR ");
	    }
	    removeEndKeyWord(builder, " OR ");
	}

	String sql = builder.toString();
	return sql;
    }

    public static void main(String[] args) {
	StringBuilder builder = new StringBuilder("you AND hihi  AND ");
	removeEndKeyWord(builder, " AND ");
	System.out.println(builder.toString());

    }

}
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics