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());

    }

}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值