SQL 中 $和#的区别

mybatis 中的#和$的区别]

#相当于对数据 加上 双引号,$相当于直接显示数据`

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为rder by "111", 如果传入的值是id,则解析成的sql为order by "id".
    SELECT  * FROM sys_user WHERE ${key}=#{value} 

 2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id,  如果传入的值是id,则解析成的sql为order by id. 

 3. #方式能够很大程度防止sql注入。

  4.$方式无法防止Sql注入。

5.$方式一般用于传入数据库对象,例如传入表名. 

 6.一般能用#的就别用$.MyBatis排序时使用order by 动态参数时需要注意,用$而不是#字符串替换默认情况下,使用#{}格式的语法会导致`MyBatis`创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在`SQL`语句中插入一个不改变的字符串。比如,像`ORDER BY`,你可以这样来使用:ORDER BY ${columnName}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,734评论 0 4
  • 3月份的时候我决定加入这家新公司负责市场运营的工作,此前我已在出境游领域工作了近3年。早在2012年的夏天,我就参...
    以绘手记阅读 310评论 0 0
  • 今天被表妹朋友圈里的一条信息所吸引。大致内容是,图文并茂的讲诉和初恋男友两周年纪念,而男友去当兵,不能同庆。回忆着...
    喜乐相伴super琳阅读 463评论 0 0
  • 设计期见查看ViewModel内容 问题 Setting design time DataContext on a...
    Brent姜阅读 778评论 0 0
  • 衣服已经布满灰尘 床脚的蜘蛛网早已风干 水池里的滴落水声响起 坐在窗前 当我想你的时候 转身,做着曾经埋怨过的事情...
    把酒祝东风y阅读 175评论 0 1