我正在尝试使用Apache Commons Lang的StrSubstitutor
替换仅使用前缀标记的字符串中的变量,例如就像在SQL查询中用:
标记的命名参数一样。
这是我正在使用的代码片段,这不起作用。
import com.google.common.collect.ImmutableMap;
import org.apache.commons.lang3.text.StrMatcher;
import org.apache.commons.lang3.text.StrSubstitutor;
Map<String,String> m = ImmutableMap.of("a", 1);
StrSubstitutor strSubstitutor = new StrSubstitutor(m)
.setVariablePrefix(":")
.setVariableSuffix("");
System.out.println(strSubstitutor.replace("select a from t where a = :a"));
// expect select a from t where a = 1
知道怎么做吗?
我正在尝试实现自定义
StrMatcher
,但仍失败。有人曾经做过,可以分享一些经验吗?
最佳答案
在深入研究StrSubstitutor的代码后,我意识到无法使用StrSubstitutor / StrMatcher API来完成。
由于Spring的NAmedParameterJdbcTemplate不会使用替换后的参数值公开sql,因此我必须实现自己的sql参数替换器。