Mybatis中#{}与${}的使用
文章目录
- Mybatis中#{}与${}的使用
-
- 一、#{}与${}的含义
- 二、#{}与${}的用法
- 三、区别
- 四、经典面试题,#{}为啥能够防止sql注入?
一、#{}与${}的含义
#{}:为占位符
${}:为拼接符
二、#{}与${}的用法
#{}:为参数占位符?,即sql预编译,替换变量时,会对对应的变量自动加上’’
${}为字符串替换, 即字符串拼接,替换变量时,不会对对应的变量加上’’
三、区别
名称 | 用法 | 执行流程 | 执行流程 | 是否可以防止sql注入 |
---|---|---|---|---|
#{} | 为参数占位符?,即sql预编译 | 动态解析 --> 预编译 --> 运行 | 变量替换是在DBMS(数据库管理系统)中,会对对应的变量自动加上’’ | 可以 |
${} | 为字符串替换, 即字符串拼接 | 动态解析 --> 编译 -->运行 | 变量替换实在DBMS外,不会对对应的变量加上’’ | 不可以 |
四、经典面试题,#{}为啥能够防止sql注入?
因为#{}是站位符号,需要预编译,预编译时替换变量时会加 ‘’ 号。
例如:
1、使用#{}时,查询user表的所有数据
select * from #{tableName}
如果前后加上‘’号,就变成了
select * from ‘user’
运行就会报错
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘user’’ at line 1
2、使用${}时,查询user表的所有数据,就会直接替换,变成下面这样
select * from user