SqlFilter 条件组装类:
sqlType ==datatype 字段类型
这里有OR
operator between 类型比较
Type 本身过滤条件中也可设置oR and主要用于between or 还没有试用代码(可以自己实现成本身的or 一个属性多个或)
filter---该字段属于过滤条件
relation
and
or
ViewExecuteParam 传入条件信息
formatColumn ---别名控制
Criterion 每个条件的操作信息(由ViewExecuteParam部分条件参数完成)
所有的where 后面部分的条件组合都可适用,需要不同where的组合可在模板固定where 1=1 然后就是分部的条件块,不能像原始的模板where 和一个条件块固定在一起
sql:
子查询内部的条件在原sql写好
SELECT m.*, s.event_property_code,s.event_property_value FROM cms.daily_new_client88_master m LEFT JOIN cms.daily_new_client88_slave s on m.event_id= s.event_id
模板:
querySqlAndOrms(nativeQuery, groups, aggregators, filters, orders, sql, keywordPrefix, keywordSuffix,filterAndFlag,eventCode)
::=<<
<if(!groups && !aggregators && !filters && !orders)>
<sql>
<else>
SELECT
<if(!groups && !aggregators)>
*
<endif>
<if(groups)>
<groups:{group|<if(keywordPrefix && keywordSuffix)><keywordPrefix><group><keywordSuffix><else><group><endif>}; separator=",">
<endif>
<if(groups && aggregators)>,<endif>
<if(aggregators)>
<if(nativeQuery)>
<aggregators:{agg|<if(agg)><if(keywordPrefix && keywordSuffix)><keywordPrefix><agg.column><keywordSuffix><else><agg.column><endif><endif>}; separator=",">
<else>
<aggregators:{agg|<if(agg)><agg><endif>}; separator=",">
<endif>
<endif>
FROM (<sql>) T
<if(eventCode)>
WHERE <eventCode>
<endif>
<if(!eventCode)>
WHERE 1=1
<endif>
<if(filters && filterAndFlag)>
AND ( <filters:{filter|<if(filter)><filter><endif>}; separator=" AND "> )
<endif>
<if(filters && !filterAndFlag)>
AND ( <filters:{filter|<if(filter)><filter><endif>}; separator=" OR "> )
<endif>
<if(groups)>
<if(!nativeQuery)>
GROUP BY <groups:{group|<if(keywordPrefix && keywordSuffix)><keywordPrefix><group><keywordSuffix><else><group><endif>}; separator=",">
<endif>
<endif>
<if(orders)>
ORDER BY <orders:{order|<if(order)><order.column> <order.direction><endif>}; separator=", ">
<endif>
<endif>
>>
public List<String> convertFilters(List<String> filterStrs, Source source){-----每一部分完成每一部分的所有组装(除了sql关键字)------------把所有的filter组装成完整的where过滤条件
List<String> whereClauses = new ArrayList<>();
List<SqlFilter> filters = new ArrayList<>();
try{
if(null == filterStrs || filterStrs.isEmpty()){
return null;
}
for(String str : filterStrs){----所有的过滤字段
SqlFilter obj = JSON.parseObject(str, SqlFilter.class);---------
if(!StringUtils.isEmpty(obj.getName())){
obj.setName(ViewExecuteParam.getField(obj.getName(), source.getJdbcUrl(), source.getDbVersion()));----判断是否需要前后缀
}
filters.add(obj);
}
filters.forEach(filter -> whereClauses.add(SqlFilter.dealFilter(filter)));--------------经过dealFilter就把每个filter中组装成where条件后的完整过滤语句
}catch (Exception e){
log.error("convertFilters error . filterStrs = {}, source = {}, filters = {} , whereClauses = {} ",
JSON.toJSON(filterStrs), JSON.toJSON(source), JSON.toJSON(filters), JSON.toJSON(whereClauses));
throw e;
}
return whereClauses;
}
public static String dealFilter(SqlFilter filter){
StringBuilder condition = new StringBuilder();
String type = filter.getType();
if(Type.filter.equalsIgnoreCase(type)){-----条件类的(字段的对比操作信息)
condition.append(dealOperator(filter));
}
if(Type.relation.equalsIgnoreCase(type)){
List<SqlFilter> childs = filter.getChildren();
condition.append(Consts.PARENTHESES_START);
for(int i=0; i<childs.size(); i++){
condition.append(i == 0 ? dealFilter(childs.get(i))
: Consts.SPACE + filter.getValue().toString() + Consts.SPACE + dealFilter(childs.get(i)));
}
condition.append(Consts.PARENTHESES_END);
}
return condition.toString();
}
private static String dealOperator(SqlFilter filter){
String name = filter.getName();
Object value = filter.getValue();
String operator = filter.getOperator();
String sqlType = filter.getSqlType();
Criterion criterion;
if(SqlOperatorEnum.BETWEEN.getValue().equalsIgnoreCase(operator)){
JSONArray values = (JSONArray) value;
criterion = new Criterion(name, operator, values.get(0), values.get(1), sqlType);----对一个字段的对比操作信息
}else{
criterion = new Criterion(name, operator, value, sqlType);
}
return generator(criterion);
}
private static String generator(Criterion criterion){----正真生成每个条件的对比操作信息---每一个条件完成一个条件的完整操作的信息
StringBuilder whereClause = new StringBuilder();
if(criterion.isSingleValue()){---单值操作
//column='value'
String value = criterion.getValue().toString();
whereClause.append(criterion.getColumn() + Consts.SPACE + criterion.getOperator() + Consts.SPACE);
if(criterion.isNeedApostrophe() && !Pattern.matches(pattern, value)){
whereClause.append(Consts.APOSTROPHE + value + Consts.APOSTROPHE);
}else{
whereClause.append(value);
}
}else if(criterion.isBetweenValue()){ ---- between
//column>='' and column<=''
String value1 = criterion.getValue().toString();
whereClause.append(Consts.PARENTHESES_START);
whereClause.append(criterion.getColumn()+ Consts.SPACE + SqlOperatorEnum.GREATERTHANEQUALS.getValue() + Consts.SPACE);
if(criterion.isNeedApostrophe() && !Pattern.matches(pattern, value1)){
whereClause.append(Consts.APOSTROPHE + value1 + Consts.APOSTROPHE);
}else{
whereClause.append(value1);
}
whereClause.append(Consts.SPACE + SqlFilter.Type.and + Consts.SPACE);
whereClause.append(criterion.getColumn()+ Consts.SPACE + SqlOperatorEnum.MINORTHANEQUALS.getValue() + Consts.SPACE);
String value2 = criterion.getSecondValue().toString();
if(criterion.isNeedApostrophe() && !Pattern.matches(pattern, value2)){
whereClause.append(Consts.APOSTROPHE + value2 + Consts.APOSTROPHE);
}else{
whereClause.append(value2);
}
whereClause.append(Consts.PARENTHESES_END);
}else if(criterion.isListValue()){ -----in
List values = (List) criterion.getValue();
//column in ()
whereClause.append(criterion.getColumn() + Consts.SPACE + criterion.getOperator() + Consts.SPACE);
whereClause.append(Consts.PARENTHESES_START);
if(criterion.isNeedApostrophe() && !Pattern.matches(pattern, values.get(0).toString())){
whereClause.append(Consts.APOSTROPHE +
StringUtils.join(values,Consts.APOSTROPHE + Consts.COMMA + Consts.APOSTROPHE) +
Consts.APOSTROPHE);
}else{
whereClause.append(StringUtils.join(values, Consts.COMMA));
}
whereClause.append(Consts.PARENTHESES_END);
}
return whereClause.toString();
}
相关推荐
DaVinci Configurator Classic是DaVinci Configurator Pro的一部分,专门用于配置、验证和生成AUTOSAR Classic基础软件(BSW)和运行时环境(RTE)。它提供了一个功能强大且灵活的配置环境,允许用户根据不同的应用...
《使用DaVinci Configurator整合AUTOSAR模块的教程》 在现代汽车电子系统中,AUTOSAR(AUTomotive Open System ARchitecture)是一种广泛采用的软件架构,旨在提高软件组件的复用性和可移植性。而DaVinci ...
Vector Davinci是Vector公司开发的适用于AutoSAR基础软件平台MICROSAR的集成开发环境(IDE)。AutoSAR(汽车电子架构软件平台)是一个全球性的开放合作项目,旨在开发汽车电子标准的软件架构。在本手册中,会详细...
da Vinci Xi手术机器人系统用户手册 da Vinci Xi手术机器人系统是Intuitive Surgical, Inc.开发的一款先进的手术机器人系统,旨在提供高效、安全的手术环境。该系统用户手册详细介绍了da Vinci Xi系统的使用和操作...
- Intuitive、Intuitive Surgical、Beyond the Limits of the Human Hand、daVinci、daVinci S、daVinci Si、daVinci Xi、daVinci X、EndoWrist、TilePro、OnSite等均为Intuitive Surgical, Inc.的商标或注册商标。...
主机操作是 DaVinci 系统的核心部分,包括以操作员用户登录系统、DaVinci 应用程序等方面。操作员用户可以通过登录系统来访问和控制 DaVinci 系统,进行各种操作和设置。 2.2 扫描架(Scanner)操作 扫描架操作是 ...
ChatGPT接入项目实例 Python 调用davinci 002 api 示例 text-davinci-002
《达芬奇开发环境 davinci-dev-0.3 深度解析》 "达芬奇(davinci)",这个名字听起来或许让人联想到文艺复兴时期的杰出艺术家,但在IT领域,它可能代表了一种创新的开发工具或框架。本文将深入探讨名为"davinci-dev-...
本教程将详细讲解如何在DaVinci Developer工具中添加并管理RTE信号。 一、了解RTE与信号 RTE是Autosar系统中的核心组件,它负责在ECU(Electronic Control Unit)上运行时,管理SWC间的通信。信号(Signal)是...
"达芬奇开发者"(Davinci Developer)是面向这一领域,专为实现向量(Vector)汽车电子开发而设计的一款强大工具。它集成了多种功能,旨在提升开发效率,确保软件质量,并简化复杂的嵌入式系统开发流程。 一、向量...
很多做AUTOSAR软件集成时,没有配置davinci所需的dbc文件,我分享一下
《DaVinCi配置DEM模块的技术手册》是针对汽车电子领域,特别是AUTOSAR(AUTomotive Open System ARchitecture)环境中的诊断事件管理模块进行详细阐述的技术文档。该手册覆盖了DEM(Diagnostic Event Manager)的...
AUTOSAR 就是AUTomotive Open System ARchitecture,MATLAB + DaVinci(国内主流)进行AUTOSAR开发车用ECU软件的工具链使用说明文档。
根据提供的标题、描述、标签及部分内容,我们可以提炼出与DaVinci开发环境搭建相关的几个关键知识点。 ### DaVinci开发环境搭建概述 DaVinci系列是德州仪器(TI)推出的一系列高性能嵌入式多媒体处理器,它集成了...
DaVinCi 配置 PduR模块的技术手册,内容涉及PduR功能模块介绍,API接口等.基于RH850芯片的DaVinCi诊断模块配置手册。虽然说是RH850芯片SIP包里的,但是文档内的内容是标准化的,通用化的。包括函数接口等服务都是...
这个“TI-DaVinci.rar_davinci_ti davinci o”压缩包包含了关于DaVinci技术的培训资料,特别是针对开发者的深入学习材料。 在“TI DaVinci.ppt”这个文件中,我们可以期待了解到以下几个关键知识点: 1. **程序...
《DaVinCi 配置EcuM模块的技术手册》提供了关于EcuM模块的详尽指导,特别是针对基于RH850芯片的诊断模块配置。EcuM(Electronic Control Unit Manager)是AUTOSAR(AUTomotive Open System ARchitecture)架构中的...
Davinci框架是Davinci处理器的核心组成部分,它定义了硬件资源如何与软件交互,以及如何有效地进行多媒体数据处理。这个框架包含了多个层次,包括硬件接口层、驱动层、操作系统层以及应用程序接口层。通过理解这个...
DaVinci Resolve 12.5 mac 是一款为Mac OS 平台开发的达芬奇调色系统,DaVinci Resolve mac 即是大家俗称的达芬奇12,DaVinci Resolve mac 破解 是与好莱坞电影公司合作开发的世界顶级的调色软件,被广泛的用于电影....
《 davinci-resizer.zip:TI Davinci系列硬件缩放工具详解及应用》 在嵌入式视频处理领域,TI(Texas Instruments)的Davinci系列处理器以其强大的视频编解码能力而闻名。针对这一系列处理器,TI推出了一款名为da...