MyBatis 中 $ 与 #的区别

1.# 是将传入的值当作字符串的形式,eg:select id,name,age from student where id = #{id}, 当前端把 id 值 1, 传入到后台的时候,就相当于 select id,name,age from student where id = '1'

2.$ 是将传入的数据直接显示生成 SQL 语句,eg:select id,name,age from student where id = ${id}, 当前端把 id 值 1 传入到后台的时候,就相当于 select id,name,age from student where id = 1

3. 使用 #可以很大程度防止 sql 注入.(语句的拼接)

4. 但是如果使用在 order by 中就需要使用 $

5. 在大多数情况下还是经常使用 #, 但在不同情况下必须使用 $

我觉得 #与 $ 的区别最大在于:#{} 传入值时,sql 解析时,参数是带引号的,而 {} 传入值,sql 解析时,参数是不带引号的

一:理解 mybatis 中 $ 与#

在 mybatis 中 $ 与 #都是在 sql 中动态的传入参数

eg:select id,name,age from student where name = #{name} 这个 name 是动态的,可变的,当你传入什么样的值,就会根据你传入的值执行 sql 语句

二:使用 $ 与#

#{}: 解析为一个 JDBC 预编译语句 (prepared statement) 的参数标记符,一个 #{} 被解析为一个参数占位符

${}: 仅仅为一个纯粹的 string 替换,在动态 SQL 解析阶段将会进行变量替换

name --> cy

eg:select id,name,age from student where name = #{name} -- name = 'cy'

select id,name,age from student where name = ${name} -- name = cy