SQL算法中的变量使用占位符动态赋值

需求:
1.每张表的SQL算法配置到数据库的配置表中
2.SQL算法中的条件统一使用占位符填充
3.当执行sql时需要将查询出来的SQL算法中的占位符动态赋值

一、真实案例还原

这里拿表进行演示

1. 表结构
create table HERO
(SNO       VARCHAR2(20) not null,USER_NAME VARCHAR2(20),AGE       NUMBER(3)
);
-- Add comments to the table 
comment on table HEROis '英雄信息表';
-- Add comments to the columns 
comment on column HERO.SNOis '英雄编码';
comment on column HERO.USER_NAMEis '英雄名称';
comment on column HERO.AGEis '英雄年龄';
-- Create/Recreate primary, unique and foreign key constraints 
alter table HEROadd primary key (SNO);初始化数据:
insert into hero (SNO, USER_NAME, AGE)values ('1', '盖伦', '1');
insert into hero (SNO, USER_NAME, AGE)values ('2', '小丑', '2');
insert into hero (SNO, USER_NAME, AGE)values ('3', '莫甘娜', '3');
insert into hero (SNO, USER_NAME, AGE)values ('4', '寒冰', '4');
insert into hero (SNO, USER_NAME, AGE)values ('5', '剑圣', '5');
insert into hero (SNO, USER_NAME, AGE)values ('6', '剑圣', '6');
2. SQL算法案例:

表名sys_user ,具体的SNO根据不同的场景动态赋值

SELECT * FROM  HERO WHERE SNO='?SNO?' and age ='?age?'
3. 动态赋值工具类
package com.gblfy.util;import com.gblfy.DCAApplication;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 动态拼接sql中的的占位符对应的值** @author gblfy* @date 2021-01-20*/
public class DynamicSql {private final static Logger logger = LoggerFactory.getLogger(DynamicSql.class);private String sql;/*** 赋值** @param colum 匹配* @param value 值*/public void setValue(String colum, String value) {this.setSql(this.getSql().replaceAll("\\?" + colum + "\\?", value));// this.setSql(this.getSql().replaceAll("\\?" + colum + "\\?", "'" + value + "'"));}/*** 拼接sql** @param addSql*/public void addSql(String addSql) {this.setSql(this.getSql() + addSql);}public String getSql() {return sql;}public void setSql(String sql) {this.sql = sql;}public DynamicSql(String sql) {this.sql = sql;}public DynamicSql() {}
}
4. 实现逻辑

1.表+算法 集合初始化
2.根据场景标识和表名 遍历不同的场景下面的表列表
3.将查询出来的表名和对应的SQL算法集合判断
4.动态拼接SQL
5.SQL算法动态赋值

5. 逻辑处理类
package com.gblfy.service.impl;import com.gblfy.result.ALGResult;
import com.gblfy.service.SQLService;
import com.gblfy.util.DynamicSql;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class SQLServiceImpl implements SQLService {private final static Logger logger = LoggerFactory.getLogger(SQLServiceImpl.class);@Overridepublic void sqlDynamicToValue(String sno, String age, String tableName) {// 全量场景标识String flag = "F";// 1.表+算法 集合初始化List<ALGResult> algResultList = null;// 2.根据场景标识和表名 遍历不同的场景下面的表列表algResultList = algResultMapper.selectALG(tableName, flag);// 3.将查询出来的表名和对应的SQL算法集合判断if (algResultList != null && !algResultList.isEmpty()) {for (ALGResult algResult : algResultList) {// 4.动态拼接SQL//算法初始化String cycleALGSql = "";//拼接算法+拼接条件=最终的sql//循环获取 每一个表名称String cycleTableName = algResult.getHxrulename();//循环获取 每一个表名称对应的算法拼接条件if (!StringUtils.isEmpty(algResult.getHxAlgValue1())) {cycleALGSql += algResult.getHxAlgValue1();}if (!StringUtils.isEmpty(algResult.getHxAlgValue2())) {cycleALGSql += algResult.getHxAlgValue2();}DynamicSql dealCycleALGSql = new DynamicSql(cycleALGSql);dealCycleALGSql.setValue("sno", sno);dealCycleALGSql.setValue("age", age);// 5.SQL算法动态赋值logger.info("动态赋值处理后 :[{}]", dealCycleALGSql.getSql());}}}
}
6. 效果图
```bash
SELECT * FROM  HERO WHERE SNO='1' and age ='2'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518911.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BigData NoSQL —— ApsaraDB HBase数据存储与分析平台概览

一、引言 时间到了2019年&#xff0c;数据库也发展到了一个新的拐点&#xff0c;有三个明显的趋势&#xff1a; 越来越多的数据库会做云原生(CloudNative)&#xff0c;会不断利用新的硬件及云本身的优势打造CloudNative数据库&#xff0c;国内以阿里云的Cloud HBase、POLARDB…

概率中的 50 个具有挑战性的问题 [05/50]:正方形硬币

一、说明 我最近对与概率有关的问题产生了兴趣。我偶然读到了弗雷德里克莫斯特勒&#xff08;Frederick Mosteller&#xff09;的《概率论中的五十个具有挑战性的问题与解决方案》&#xff09;一书。我认为创建一个系列来讨论这些可能作为面试问题出现的迷人问题会很有趣。每篇…

AWS宣布Amazon EKS在AWS中国(宁夏)区域和AWS中国(北京)区域正式商用

2020年3月13日&#xff0c;北京&#xff0c;今天&#xff0c;亚马逊旗下公司Amazon Web Services, Inc. (AWS) 宣布&#xff0c;Amazon Elastic Kubernetes Service&#xff08;Amazon EKS&#xff09;现已在由宁夏西部云数据技术有限公司&#xff08;简称“西云数据”&#xf…

从HelloWorld看Knative Serving代码实现

概念先知 官方给出的这几个资源的关系图还是比较清晰的&#xff1a; 1.Service: 自动管理工作负载整个生命周期。负责创建route,configuration以及每个service更新的revision。通过Service可以指定路由流量使用最新的revision&#xff0c;还是固定的revision。 2.Route&#x…

策略模式+工厂模式(反射)+枚举代替 大量 if..else if..

实际项目中我们经常碰到需要使用if…else…if的分支判断这种情况。 这种写法带来一些弊端。 一旦分支多太多&#xff0c;逻辑复杂&#xff0c;会导致代码十分冗长&#xff0c;增加阅读难度。 如果需要增加或减少分支&#xff0c;需要改动if…elseif&#xff0c;增大因代码改动而…

开发函数计算的正确姿势 —— Fun validate 语法校验排错指南

1. 前言 首先介绍下在本文出现的几个比较重要的概念&#xff1a; 函数计算&#xff08;Function Compute&#xff09;: 函数计算是一个事件驱动的服务&#xff0c;通过函数计算&#xff0c;用户无需管理服务器等运行情况&#xff0c;只需编写代码并上传。函数计算准备计算资源…

我最喜欢的云 IDE 推荐!

云IDE——这是我最喜欢的一种完全避免管理开发环境的新方法。作者 | David Kramer译者 | 弯月&#xff0c;责编 | 郭芮头图 | CSDN 下载自东方 IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;以下为译文&#xff1a;设置和维护开发环境是一件非常麻烦的事情。如…

优化if-else代码的八种方案!

文章目录1. 优化方案一&#xff1a;提前return&#xff0c;去除不必要的else2. 优化方案二&#xff1a;使用条件三目运算符3. 优化方案三&#xff1a;使用枚举4. 优化方案四&#xff1a;合并条件表达式5. 优化方案五&#xff1a;使用 Optional6. 优化方案六&#xff1a;表驱动法…

阿里五年晋升三次,这个程序员要聊聊他的选择

小二穆远是蚂蚁金服的一名程序员&#xff0c;五年晋升了三次&#xff0c;他要聊聊自己的五年阿里之旅&#xff0c;那些变化、坚持和泪水。请看本期的年陈故事会。 说起与阿里的缘分&#xff0c;是因为读书时在T公司实习&#xff0c;不喜欢实习那个组的工作内容&#xff0c;毅然…

IP应用加速技术详解:如何提升动静混合站点的访问速率?

全站加速&#xff08;DCDN&#xff09;-IPA是阿里云自主研发四层加速产品&#xff0c;它基于TCP/UDP的私有协议提供加速服务&#xff0c;包括解决跨运营商网络不稳定、单线源站、突发流量、网络拥塞等诸多因素导致的延迟高、服务不稳定的问题&#xff0c;提升传输性能和用户体验…

Java-记一次if-else代码优化

https://artisan.blog.csdn.net/article/details/86703136

2020 年最新版 68 道Redis面试题,20000 字干货,赶紧收藏起来备用!

作者 | ThinkWon责编 | 徐威龙来源 | CSDN 博客封图| CSDN 下载于视觉中国Redis(Remote Dictionary Server) 是一个使用 C 语言编写的&#xff0c;开源的&#xff08;BSD许可&#xff09;高性能非关系型&#xff08;NoSQL&#xff09;的键值对数据库。Redis 可以存储键和五种不…

异常检测的N种方法,阿里工程师都盘出来了

阿里妹导读&#xff1a;互联网黑产盛行&#xff0c;其作弊手段层出不穷&#xff0c;导致广告效果降低&#xff0c;APP推广成本暴增。精准识别作弊是互联网公司和广告主的殷切期望。今天我们将从时间序列、统计、距离、线性方法、分布、树、图、行为序列、有监督机器学习和深度学…

TalkingData的Spark On Kubernetes实践

众所周知&#xff0c;Spark是一个快速、通用的大规模数据处理平台&#xff0c;和Hadoop的MapReduce计算框架类似。但是相对于MapReduce&#xff0c;Spark凭借其可伸缩、基于内存计算等特点&#xff0c;以及可以直接读写Hadoop上任何格式数据的优势&#xff0c;使批处理更加高效…

ORACLE使用批量插入100万测试数据

CREATE TABLE test_data (ID varchar2(32),NAME1 varchar2(9),NAME2 varchar2(100),NAME3 varchar2(100) ); COMMENT ON TABLE test_data IS 测试表;beginfor i in 1 .. 1000000 loopINSERT INTO "DCA"."TEST_DATA" ("ID", "NAME1", &…

阿里技术男的成长史:越想证明自己死得越快……

在上海工作8年后&#xff0c;身为部门经理的钱磊&#xff0c;管理着一家ERP公司的百十来号员工&#xff0c;“再往上爬就是老板和他儿子了……从这个领域的技术角度来讲算是做到了顶。”05年&#xff0c;钱磊就开始关注一家名字奇怪&#xff0c;做事也奇怪的公司。 要不要折腾…

程序员1w5以下的,2020年就要面对现实了...

BOSS直聘最近发布&#xff0c;“互联网行业30%新增岗位&#xff0c;全都是技术岗&#xff01;各公司开启了新一轮抢人计划”。大家在这个春招一定有很多目标&#xff0c;找到理想工作&#xff0c;换个大房子住&#xff0c;给爸妈多寄点钱&#xff0c;给女朋友换个新手机……CSD…

MYSQL用存储过程创建百万级测试数据表

1.创建随机字符串函数&#xff0c;便于创建名称 -- delimiter $$ -- 执行出现“This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled -- (you *might* want to use the less safe log_bin_trust_function_…

对话亲历者|鲁肃:我在支付宝“拧螺丝“的日子

对话亲历者&#xff1a;他是支付宝技术平台的奠基人之一&#xff0c;但是他总说“这还不是我心中最完美的架构”&#xff1b;他行事低调但却有着“此时此地&#xff0c;非我莫属”的豪气&#xff1b;他曾无数次充当救火大队长&#xff0c;但自评只是“没有掉队的那个人”。 在2…

Flutter高内聚组件怎么做?阿里闲鱼打造开源高效方案!

fish_redux是闲鱼技术团队打造的flutter应用开发框架&#xff0c;旨在解决页面内组件间的高内聚、低耦合问题。开源地址&#xff1a;https://github.com/alibaba/fish-redux 从react_redux说起 redux对于前端的同学来说是一个比较熟悉的框架了&#xff0c;fish_redux借鉴了re…