SQL中的变量及占位符格式

最后更新:2024-09-30 17:00:30 | 状态:未完成

  1. SELECT * FROM CRM_USER WHERE ID = :ID
  2. SELECT * FROM CRM_USER WHERE ID = ${ID}
  3. 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的格式

首页 最近更新 搜索 提交 回复