mybatis中${}与${}的区别

mybatis中${}与${}的区别

#{}与${}


1、 #是将传入的值当做字符串的形式
    select id,name,age,adress from student where id =#
当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id ='1'。

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

3 、使用#可以很大程度上防止sql注入。
    语句的拼接  #,使用的是PreparedStatement,会有类型转换,比较安全 简单的说就是#{}是经过预编译的,是安全的,${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。

4、 但是如果使用在order by 中就需要使用 $。
    order by是肯定只能用 ${}了,用#{}会多个' '导致sql语句失效。此外还有一个like 语句后也需要用${}。
    like语句可以使用like CONCAT('%',#,'%') 类似的拼接防止sql注入。

5、 在大多数情况下还是经常使用#,但在不同情况下必须使用$。
    #{}传入值时,sql解析时,参数是带引号的,而${}传入值,sql解析时,参数是不带引号的。

在mybatis中的$与#都是在sql中动态的传入参数。
#{}: 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符 。
${}: 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。
name-->cy
select id,name,age from student where name=#   -- name='cy'
select id,name,age from student where name=$    -- name=cy

 


Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: http://www.lhclovejy1314.top/archives/mybatis中与的区别