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());
}
}
分享到:
相关推荐
### PIL图像处理模块paste方法简单使用详解 #### 一、PIL与Pillow模块简介 在Python编程语言中,PIL(Python Imaging Library)是一个强大的图像处理库,它提供了多种功能来处理各种类型的图像文件。然而,由于PIL...
【基于js粘贴事件paste简单解析以及遇到的坑】 在JavaScript中,`paste`事件允许开发者在用户执行粘贴操作时捕获并处理剪贴板的内容。本文将深入探讨如何在Chrome浏览器中利用此事件,并解决与Safari浏览器兼容性的...
Paste
【Paste_2.2.5(MAC新版本)】是一个专为macOS High Sierra系统设计的应用程序更新,针对用户在使用旧版本时遇到的闪退问题进行了修复和优化。Paste是一款强大的剪贴板管理工具,它能够提升用户在Mac设备上的复制粘贴...
Easy Copy Paste是一款针对WordPress平台设计的开源插件,主要用于提升用户在编辑文章时的效率,尤其是处理外部链接图片的下载和本地化。2.0版本的发布,为用户带来了更加强大和便捷的功能,旨在解决许多WordPress...
本文将深入探讨两种常见的PCB焊接或组装工艺——"Pin in Paste"和"Press Fit"。 首先,让我们来了解"Pin in Paste"工艺。这种工艺主要用于焊接具有通孔引脚的元器件,比如微处理器和内存芯片。在"Pin in Paste"过程...
为了进一步增强其用户体验,"clipboard_image_paste"插件应运而生,该插件允许用户直接从剪贴板粘贴图片到Redmine中的表单注释框,极大地提高了工作效率。 这个插件主要适用于Redmine 4.0.4版本,通过"clipboard_...
Altium Designer(简称AD)是一款广泛使用的PCB设计软件,其强大的功能之一就是Smart Paste功能。这个特性极大地提升了原理图设计的效率,特别是在处理大量网络连接时,避免了手动输入网络标号的繁琐工作。 首先,...
18更新最新版,Paste for Mac 中文破解版,下载解压zip文件,dmg文件双击安装无需注册码即可使用
【Paste2Dos Tool】是一个专为DOS环境设计的小巧实用工具,它的主要功能是让使用者在DOS命令行界面中实现文本的复制和粘贴操作。在传统的DOS系统中,由于其命令行界面的限制,用户通常无法直接利用键盘快捷键进行...
"前端项目-paste.js.zip" 是一个专为此目的设计的JavaScript库,它允许开发者在各种浏览器上实现跨平台的剪贴板读取功能。这个压缩包包含了一个名为 "paste.js-master" 的主文件夹,里面应该是源代码和其他相关资源...
### PCB中PASTE和SOLDER的区别 在印刷电路板(Printed Circuit Board,简称PCB)的设计与制造过程中,涉及到多种不同的技术与材料。其中,PASTE(焊膏)和SOLDER(焊料)是两个非常重要的概念。下面将详细介绍这...
复制粘贴历史记录小软件下载,Mac(Paste破解版), 博客链接:https://blog.csdn.net/kzadmxz/article/details/81413141
【标题】中的“PasteMe”是一个快速分享文本代码的在线平台,特别强调了其支持加密、一键复制、永久保存以及阅后即焚等高级特性。这个项目是针对“Ubuntu Paste”的本地化版本,旨在为用户提供更加安全和便捷的文本...
在PCB设计过程中,Solder Mask和Paste Mask是两个重要的概念。它们在设计层面上起着关键作用,确保了电子产品的良好焊接质量和外观美观。初学者往往容易混淆这两个概念,因为它们都涉及PCB板上焊盘的保护和管理。...
Paste – smart clipboard history & snippets manager 对于 需要打开 直接复制粘贴功能的同学: 1.下载了附件中的Paste_Helper.app.zip,解压后 2.When the download is complete, launch Paste Helper by double ...
具体地,TOP PASTE和TOP SOLDER的区别可以从以下几个方面来理解:首先,TOP SOLDER指的是需要上锡的部分,而TOP PASTE指的是助焊层,用于贴片封装时对应焊盘的锡膏涂覆。其次,在SMT封装中,TOP LAYER和TOP PASTE是...
Paste for mac是一款神奇的剪切板管理软件:Paste它能够为您储存您在设备上复制您的所有内容,并将其储存在Paste的历史记录中。是您日常生活工作中必不可少的一款软件,如果您也在寻找剪切板管理查看工具,那么paste...
本项目“copy_paste_aug_main.zip”是关于如何利用Python中的albumentations库来实现一种特殊的数据增强方法——copy paste。这种方法涉及到将图像的一部分复制并粘贴到其他位置,同时还可以在贴图过程中进行随机的...
The Paste插件可以在WordPress编辑器里直接复制截图粘贴就可实现图片上传,提高了写作效率,加快了工作流程。 使用方法:直接上传插件进行安装启用。此插件无设置界面,启用后可直接在编辑器内进行粘贴操作。 版本...