Mybatis中#{}与${}的使用

Mybatis中#{}与${}的使用


一、#{}与${}的含义

#{}:为占位符

${}:为拼接符

二、#{}与${}的用法

#{}:为参数占位符?,即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
发布了53 篇原创文章 · 获赞 42 · 访问量 9万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览