场景:
我们在后台根据自定义SQL模板生成接口,自定义接口所传递的参数会根据模板中的参数进行匹配生成需要执行的SQL语句。
自定义的 SQL 模板如:
select * from account where id = {id} and user_name like '%{user_name}%'
在做关键词替换的时候{user_name}
,执行的SQL会产生多余的''引号,如:
占位符替换:
select * from account where user_name like '%?%' and id = ?
根据参数值,最终生成的执行SQL:
select * from account where user_name like '%'张三'%' and id = 1
解决方法:
go sql like标准写法
自定义sql 模板:
select * from account where id={id} AND user_name like '%{user_name}%'
最终的执行代码:
db.query("select * from account where id=? AND user_name like ?",1,"%张三%")
- 第一步:匹配
'%{user_name}%'
、'%{user_name}'
、'{user_name}%'
格式的字符串 正则:'%{(.*?)}%'|'%{(.*?)}%?'|'%?{(.*?)}%'
- 第二步:占位符:替换
'%{user_name}%'
为:?
- 第三步骤:根据正则匹配的模板
'%{user_name}%'
针对参数值的时候值:替换张三
为:%张三%