码迷,mamicode.com
首页 > 其他好文 > 详细

Mybatis中#和$区别

时间:2017-06-22 01:13:28      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:find   语句   解释   order by   基本   防止   问题   ...   sql语句   

零、引言

使用 #{name} 的时候,MyBatis会进行预编译,防止SQL注入的问题(官方话)
用一个通俗一点的例子来解释,比如有如下MyBatis的SQL语句

一、最正确的用法

  1. <selectid="find">
  2. ... where name = #{name} order by ${columnName}
  3. </select>
说明:如果name的类型为String值为LCF,columnName的类型为String值为 id
上述SQL翻译结果是:
  1. ...where name =‘LCF‘ order by id
1. #{name} 会根据传入数据的类型进行预编译,所以在生成SQL的时候自动加上了单引号。
2.${columnName} 会直接将结果替换进来。

二、反例说明

  1. <selectid="find">
  2. ... where name = ${name} order by #{columnName}
  3. </select>
说明:基本类型和值如上所述,该SQL翻译出来的结果是什么?
  1. ...where name = LCF order by‘id‘
仔细看LCF是没有单引号引起来的,反倒是 id 被单引号括起来了。
 

三、结论

#会进行预编译,防止SQL注入。
$会被直接进行字符替换,容易造成SQL注入。
 
#####################LCF###############2017-06-21#####################

Mybatis中#和$区别

标签:find   语句   解释   order by   基本   防止   问题   ...   sql语句   

原文地址:http://www.cnblogs.com/LiuChunfu/p/7062297.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!