天天看点

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

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
           

继续阅读