`
jay_kid
  • 浏览: 65062 次
  • 性别: 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());

    }

}
 
分享到:
评论

相关推荐

    PIL图像处理模块paste方法简单使用详解

    ### PIL图像处理模块paste方法简单使用详解 #### 一、PIL与Pillow模块简介 在Python编程语言中,PIL(Python Imaging Library)是一个强大的图像处理库,它提供了多种功能来处理各种类型的图像文件。然而,由于PIL...

    基于js粘贴事件paste简单解析以及遇到的坑

    【基于js粘贴事件paste简单解析以及遇到的坑】 在JavaScript中,`paste`事件允许开发者在用户执行粘贴操作时捕获并处理剪贴板的内容。本文将深入探讨如何在Chrome浏览器中利用此事件,并解决与Safari浏览器兼容性的...

    Paste_3.0.9.dmg

    Paste

    Paste_2.2.5(MAC新版本)

    【Paste_2.2.5(MAC新版本)】是一个专为macOS High Sierra系统设计的应用程序更新,针对用户在使用旧版本时遇到的闪退问题进行了修复和优化。Paste是一款强大的剪贴板管理工具,它能够提升用户在Mac设备上的复制粘贴...

    自用开源 Easy Copy Paste的插件,2.0版本,wordpress插件

    Easy Copy Paste是一款针对WordPress平台设计的开源插件,主要用于提升用户在编辑文章时的效率,尤其是处理外部链接图片的下载和本地化。2.0版本的发布,为用户带来了更加强大和便捷的功能,旨在解决许多WordPress...

    Pin in Paste 和 Press Fit 两种PCB焊接或组装工艺示例

    本文将深入探讨两种常见的PCB焊接或组装工艺——"Pin in Paste"和"Press Fit"。 首先,让我们来了解"Pin in Paste"工艺。这种工艺主要用于焊接具有通孔引脚的元器件,比如微处理器和内存芯片。在"Pin in Paste"过程...

    redmine图片粘贴插件:clipboard_image_paste.zip

    为了进一步增强其用户体验,"clipboard_image_paste"插件应运而生,该插件允许用户直接从剪贴板粘贴图片到Redmine中的表单注释框,极大地提高了工作效率。 这个插件主要适用于Redmine 4.0.4版本,通过"clipboard_...

    如果你还不知道AD原理图的Smart Paste

    Altium Designer(简称AD)是一款广泛使用的PCB设计软件,其强大的功能之一就是Smart Paste功能。这个特性极大地提升了原理图设计的效率,特别是在处理大量网络连接时,避免了手动输入网络标号的繁琐工作。 首先,...

    Paste2 for mac 最新中文破解版

    18更新最新版,Paste for Mac 中文破解版,下载解压zip文件,dmg文件双击安装无需注册码即可使用

    Paste2Dos Tool

    【Paste2Dos Tool】是一个专为DOS环境设计的小巧实用工具,它的主要功能是让使用者在DOS命令行界面中实现文本的复制和粘贴操作。在传统的DOS系统中,由于其命令行界面的限制,用户通常无法直接利用键盘快捷键进行...

    前端项目-paste.js.zip

    "前端项目-paste.js.zip" 是一个专为此目的设计的JavaScript库,它允许开发者在各种浏览器上实现跨平台的剪贴板读取功能。这个压缩包包含了一个名为 "paste.js-master" 的主文件夹,里面应该是源代码和其他相关资源...

    PCB中PASTE和SOLDER的区别

    ### PCB中PASTE和SOLDER的区别 在印刷电路板(Printed Circuit Board,简称PCB)的设计与制造过程中,涉及到多种不同的技术与材料。其中,PASTE(焊膏)和SOLDER(焊料)是两个非常重要的概念。下面将详细介绍这...

    Paste破解版:mac复制粘贴历史记录小软件

    复制粘贴历史记录小软件下载,Mac(Paste破解版), 博客链接:https://blog.csdn.net/kzadmxz/article/details/81413141

    PasteMe快速分享文本代码的网站项目支持加密一键复制永久保存阅后即焚等功能

    【标题】中的“PasteMe”是一个快速分享文本代码的在线平台,特别强调了其支持加密、一键复制、永久保存以及阅后即焚等高级特性。这个项目是针对“Ubuntu Paste”的本地化版本,旨在为用户提供更加安全和便捷的文本...

    解说Solder Mask 和Paste Mask(protel裸露铜的画法)

    在PCB设计过程中,Solder Mask和Paste Mask是两个重要的概念。它们在设计层面上起着关键作用,确保了电子产品的良好焊接质量和外观美观。初学者往往容易混淆这两个概念,因为它们都涉及PCB板上焊盘的保护和管理。...

    mac下的paste效率工具

    Paste – smart clipboard history & snippets manager 对于 需要打开 直接复制粘贴功能的同学: 1.下载了附件中的Paste_Helper.app.zip,解压后 2.When the download is complete, launch Paste Helper by double ...

    PCB中TOP PASTE和TOP SOLDER的区别

    具体地,TOP PASTE和TOP SOLDER的区别可以从以下几个方面来理解:首先,TOP SOLDER指的是需要上锡的部分,而TOP PASTE指的是助焊层,用于贴片封装时对应焊盘的锡膏涂覆。其次,在SMT封装中,TOP LAYER和TOP PASTE是...

    Paste 2.5.6.dmg

    Paste for mac是一款神奇的剪切板管理软件:Paste它能够为您储存您在设备上复制您的所有内容,并将其储存在Paste的历史记录中。是您日常生活工作中必不可少的一款软件,如果您也在寻找剪切板管理查看工具,那么paste...

    copy_paste_aug_main.zip

    本项目“copy_paste_aug_main.zip”是关于如何利用Python中的albumentations库来实现一种特殊的数据增强方法——copy paste。这种方法涉及到将图像的一部分复制并粘贴到其他位置,同时还可以在贴图过程中进行随机的...

    WordPress插件The Paste支持图片粘贴上传

    The Paste插件可以在WordPress编辑器里直接复制截图粘贴就可实现图片上传,提高了写作效率,加快了工作流程。 使用方法:直接上传插件进行安装启用。此插件无设置界面,启用后可直接在编辑器内进行粘贴操作。 版本...

Global site tag (gtag.js) - Google Analytics