大家在使用mybaitis过程中,经常要手动编写sql语句。在sql中使用变量的方式一般是 #{}或者${},那么这2者有什么区别呢?
在含义上:
- #{}:为占位符
- ${}:为拼接符
用法上
- #{}:为参数占位符?,即sql预编译
- ${}为字符串替换, 即字符串拼接
在执行流程上
- #{}:动态解析 --> 预编译 --> 运行
- ${}: 动态解析 --> 编译 -->运行
在变量替换过程中
-
#{}:变量替换是在DBMS(数据库管理系统)中,会对对应的变量自动加上单引号
-
${}:变量替换实在DBMS外,不会对对应的变量加上''
sql注入方面
-
#{}可以防止sql注入
-
${}不可以防止sql注入
总结:
-
不论是单个参数还是多个参数,一律建议使用@param("")
-
能用#{}的地方尽量使用#{},减少${}
-
表名作为参数时,必须使用${}
-
order by 时,必须使用${}
-
使用${}时要注意何时加或不加单引号
网友评论