需求:
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'

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

  1. tensorflow中张量、常量、变量、占位符

    引言 从实例出发 #先导入TensorFlow import tensorflow as tf# Create TensorFlow object called hello_constant hell ...

  2. TensorFlow解析常量、变量和占位符

    TensorFlow解析常量.变量和占位符 最基本的 TensorFlow 提供了一个库来定义和执行对张量的各种数学运算.张量,可理解为一个 n 维矩阵,所有类型的数据,包括标量.矢量和矩阵等都是特殊 ...

  3. linux同名文件没有自动替换,linux – bash脚本替换文件中出现的所有占位符

    我正在尝试编写一个bash脚本,用一个同名环境变量替换文件中所有出现的占位符.举个例子,如果我有一个像下面这样的文件-- This is an {{VAR1}} {{VAR2}}. It should ...

  4. oracle 执行带参数的sql语句_当用EXECUTE IMMEDIATE执行SQL语句中的参数个数也是动态的?用什么方法实现?...

    当用EXECUTE IMMEDIATE执行SQL语句中的参数个数也是动态的?用什么方法实现? 描述详细一点就是:在要执行的SQL语句中所用到(: parameter)这种参数的个数,因具体条件不同,而 ...

  5. SQL*Plus中替换变量与定义变量

    替换变量 SQL*Plus中的替换变量又叫替代变量,它一般用来临时存储相关数据:在SQL语句之间传递值.一般使用&或&&前缀来指定替换变量. 关于使用替换变量,一般是利用其创建 ...

  6. android 换行符 编码_android中的常见的占位符及转义字符

    常见的几种占位符 String.format%d: 整数类型(十进制),如:99,其中%04d表示在前面补0,即0099 %f: 浮点类型,如:99.99 其中%.2f表示保留两位小数 %s: 字符串 ...

  7. Java Sql语句中查询变量

    Sql语句中,查询变量:'"+users+"',users是变量名: package com.snack.pay; import java.sql.Connection; impo ...

  8. Java SQL语句中插入变量

    问题描述 我们在sql语句中直接把id用一个变量来表示会报错 解决方案: 提示:在变量两侧加上' "+ +" '将源代码改为 String sql="select * f ...

  9. Android中的string资源占位符及Plurals string

    Android支持以占位符的方式,定义字符串. 例如,在xml中定义: ......... <string name="subtitle_format">%s crim ...

最新文章

  1. 一道时间复杂度的题目
  2. electronjs MySQL,javascript – 在Electron应用程序中使用sql.js.
  3. win10虚拟网络服务器,win10 虚拟专用网络服务器配置
  4. echart 设置y轴间隔_ECharts 柱状图之间的间距怎么调整的?y轴的线怎么调出来? 做成表格状。...
  5. 一文讲透数仓临时表的用法
  6. UI设计中,文本底部添加下换线
  7. Eclipse JPA Project创建
  8. 各个ip地址库对比与java实现
  9. 最简单易懂的C语言代码实现最小二乘法线性拟合直线
  10. lzg_ad:使用EWF API开发常见问题
  11. 下载代码的两种方式ssh 和 https
  12. gtid_executed和gtid_purged变量是如何初始化的
  13. Tokio教程之深入异步
  14. vscode 自定义字体样式_vscode md样式自定义
  15. pandas以文本形式读取Excel表数据写法
  16. 【Nginx】配置中 resolver 指令的使用
  17. 0902 团队销售漏斗
  18. 【UE4源代码观察】尝试调试UBT
  19. 中富金石老师靠谱分析:2022年国企改革将着力于三个方向
  20. 想驯服上古神兽吗?VR游戏《山海猎人》已登陆Viveport

热门文章

  1. AI算法连载08:统计学之贝叶斯
  2. 中科院硕士起诉导师,二审败诉
  3. 数学家田野:感谢坐冷板凳的那六年
  4. 有哪些适合大学生浏览的网站?
  5. 【AI独角兽招聘】这里有一个梦,我们一同前往…
  6. java 操作redis
  7. HDU 1495(非常可乐)
  8. 顺序表应用5:有序顺序表归并
  9. 为了让盲人也能追剧,优酷做了哪些努力?
  10. 景区门票系统上云 低成本、安全性高