字符串中的变量处理

需求描述

支持动态设置 SQL 中的 Where 条件。

需求具象化

使用特殊符号来设置列和参数,例如:$<name> = #{myName} and $<sex> = #{mySex}

  • 列名:$<...>

  • 参数:#{myName}

然后就可以将需求具体化为: 1.将所有的参数提取出来,并找出参数对应的列名 2.将所有的列名表达式替换为列名 3.将所有的参数表达式替换参数值,并根据类型添加”’”

方案一:使用字符串搜索

思路

1.识别所有的列名表达式: arg,形如 “@{…}”, 并记录其开始位置:{argIndex, arg}} 2.识别所有的参数表达式: column,形如 “#{…}”, 并记录其位置:{columnIndex, column} 3.将列名和参数合并成对:

int min = currentArgIndex;
String expectedColumn = null;
for(pair: allColumnPair){
	int diff = currentArgIndex - pair.columnIndex;
	if(diff > 0 && diff < min) {
		min = diff;
		expectedColumn = pair.column;
	}
}