mybatis中#和$的区别

一般来说,我们使用mybatis generator来生成mapper.xml文件时,会生成一些增删改查的文件,这些文件中需要传入一些参数,传参数的时候,我们会注意到,参数的大括号外面,有两种符号,一种是#,一种是$。这两种符号有什么区别呢?

SELECT*FROMemployeeWHEREname=#{name}SELECT*FROMemployeeORDERBY${salary}

从上面的内容我们可以比较清楚的看到,一般#{}用于传递查询的参数,一般用于从dao层传递一个string或者其他的参数过来,mybatis对这个参数会进行加引号的操作,将参数转变为一个字符串。

比如,这边我们想根据姓名查询某个人的信息,我们会从dao传一个参数,比如jack过来,mybatis生成对应的sql为:

SELECT*FROMemployeeWHEREname="jack"

而$则不同,我们一般用于ORDER BY的后面。此时mybatis对这个参数不会进行任何的处理,直接生成sql语句。例如,此处我们传入salary作为参数,传入第二个中,此时,mybatis生成的sql语句为:

SELECT*FROMemployeeORDERBYsalary

可以看到,mybatis对其没有做任何的处理。

但是,我们一般推荐使用的是#{},不使用${}的原因如下:

会引起sql注入,因为${}会直接参与sql编译

会影响sql语句的预编译,因为 ${ } 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换

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

推荐阅读更多精彩内容

  • 动态 SQL 是 mybatis 的强大特性之一,也是它优于其他 ORM 框架的一个重要原因。mybatis 在对...
    CoderZS阅读 8,743评论 0 7
  • tips:能用#的就别用$.Mybatis中进行参数传递,可以使用两种方式#{}或者${}其中,#{ } 解析为一...
    金琥阅读 8,148评论 2 3
  • 夜色 一个人的夜里,喜欢喝酒,吃点小东西,虽然已经洗刷了,食物连胃,酒能连心。然后早上不吃东西,能睡就睡到日上三竿...
    楼台花舍阅读 1,605评论 0 0
  • 我终于还是忍不住了,好吧,我承认,我无法等到上班那一天了。立刻,马上,对,就是现在,我必须找到可以替代TA的。不然...
    大午心理阅读 1,553评论 0 0
  • 人生的路很长 长到不敢松口气,转身去追天边的霞 人生的路很短 短到来不及开始,寻觅自由多彩的梦 自由,想象中的精灵...
    俗然阅读 3,233评论 0 3