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());
}
}
分享到:
相关推荐
可以用js给页面中的元素绑定paste事件的方法,当用户鼠标在该元素上或者该元素处于focus状态,绑定到paste事件的方法就运行了。 绑定的元素不一定是input,普通的div也是可以绑定的,如果是给docume
Paste
18更新最新版,Paste for Mac 中文破解版,下载解压zip文件,dmg文件双击安装无需注册码即可使用
Paste for mac是一款神奇的剪切板管理软件:Paste它能够为您储存您在设备上复制您的所有内容,并将其储存在Paste的历史记录中。是您日常生活工作中必不可少的一款软件,如果您也在寻找剪切板管理查看工具,那么paste...
Paste – smart clipboard history & snippets manager 对于 需要打开 直接复制粘贴功能的同学: 1.下载了附件中的Paste_Helper.app.zip,解压后 2.When the download is complete, launch Paste Helper by double ...
Paste Mac 10.12 可用 记录剪切板历史工具
paste for mac 激活版
Pin in Paste 和 Press Fit 两种PCB焊接或组装工艺示例, Pin in Paste是一种使用回流焊工艺焊接通孔元器件的工艺,Pin in Paste 是一种无焊锡组装工艺:压接
主要介绍了PIL图像处理模块paste方法简单使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
PCB中PASTE和SOLDER的区别。 1、阻焊层的意思是在整片阻焊的绿油上开窗,目的是允许焊接! 2、默认情况下,没有阻焊层的区域都要上绿油!
Paste Mac 激活版 是Mac os系统上剪切板管理工具,Paste在剪切板界面采用了卡片式的设计风格,每一段保存的剪切内容都以独立的卡片形式存在,并显示相应的应用来源和内容预览。在应用来源这里,还会根据应用的图标...
Altium Designer中PCB Layout时常见布线层Paste与Solder层的意思。希望能帮到你。
如果你还不知道AD原理图的SmartPaste功能,而你又要绘制原理图,那你很可能为一个个手填网络标号费过事...如果你还不知道AD原理图的SmartPaste功能,那就赶紧看过来,本人接下来会给大家介绍下Smart Paste的使用方法。
Paste for mac中文pj版(剪切板管理工具) v2.3.6最新版
复制粘贴历史记录小软件下载,Mac(Paste破解版), 博客链接:https://blog.csdn.net/kzadmxz/article/details/81413141
前端项目-paste.js,从剪贴板读取图像/文本数据(跨浏览器)
Paste 1.1.3 MAS [TNT] for OS X 10.9
Paste112 mac系统剪贴板工具破解版 ,好用!
Paste_3.0.2(91).dmg.zip for mac
本文首先介绍了PCB的作用及特点,其次阐述了PCB中TOP PASTE和TOP SOLDER的区别,最后介绍了PCB层的含义详解,具体的跟随小编一起来了解一下。