SQL中的变量及占位符格式
最后更新:2024-09-30 17:00:30
|
状态:未完成
- SELECT * FROM CRM_USER WHERE ID = :ID
- SELECT * FROM CRM_USER WHERE ID = ${ID}
- SELECT * FROM CRM_USER WHERE ID = ? OR ID = ?
以::标识的执行时直接替换
以:标识的执行时以?占位
NAME LIKE :NM + '%'
(NAME = :NM)
NAME = '::NM'
NM IN (:NM)
以${}标识的执行时直接替换
以{}标识的执行时以?占位
NM = {NM}
NM = ${NM}
NM LIKE '%{NM}%' NM LIKE '%${NM}%'
NM IN(${NM}
MyBatis中的变量
${id} 直接替换
#{id} 生成占位符
但有一种情况例外:变量在单引号之内时,会被直接替换而不是用占位符,如 无论是 ':ID' 还是 '::ID' 都替换成 '123'
注意在pg环境中 ::key 格式有可能会与::int 格式的类型转换冲突,如果出现冲突可以通过ConfigTable.IS_ENABLE_PLACEHOLDER_REGEX_EXT = false; 禁用
为了适配mybatis定义的sql 各种格式都兼容,但是:和{}不要混用,为方便记忆推荐统一按MyBatis格式
符号 |
解析形式 |
Anyline |
MyBatis |
备注 |
#{id} |
占位符 |
支持 |
支持 |
|
:id | 占位符 |
支持 |
不支持 |
|
{id} |
点位符 |
支持 |
不支持 |
用来兼容旧版本,新版本中不要用,避免与josn格式冲突 |
${id} | 替换 |
支持 |
支持 |
|
::id | 替换 |
支持 |
不支持 |
|
在给占位符赋值时一般通过service.query(sql, "ID:1") 或 service.query(sql, configs.param("ID", 1))的形式
但第3种情况已经生成了占位符,所以就没有key了,只能按顺序提供参数值,service.query(sql, configs.params("v1","v2","v3"))
注意不能用service.query(sql, "v1", "v2")的格式,因为这里最后可变参数是"K:V"或原生SQL的格式