Mybatis中$和#的区别

Mybatis中$和#的区别

最近在修改Mybatis里面mapper文件的时候经常会遇到这样一个问题,到底该用$还是用#来传递值呢,现在做个区别。

最明显的区别在于,#传入的时候会为其加上双引号,而$则是原样传值。

这是因为#{}使用的是预编译语句, 采用的是占位符的形式,所以会加上引号,所以其参数默认为字符串,这样可以防止SQL注入。

而${}则是原样传输,原来参数是什么样子就是什么样子。

但是要注意当parameterType为Int的时候,也可以使用#{}。也要注意排序的时候,也就是用Order by的时候要采用$来,因为这样mysql才不会转义字符串。

案例

SELECT
name
FROM t_name
WHERE add = #{add}

这样传值就传入字符串,比如String add='上海',那么其sql语句就是add="上海".

而$就用的就比较少了,一般用在order by和一些特殊情况,如下:

SELECT name  FROM t_name
where add LIKE CONCAT('%','${q}','%')
ORDER BY ${sidx} ${sord}

总结

1、#自动加上引号,可以防止SQL注入;$原样传值,无法防止SQL注入

2、常用#来传值;order by、传数据库对象(表名)、like concat常用$

  • 既然不能成为屠龙的勇士,那么就好好成为一名优秀的管家,为公主建设一个温馨美好的家。
    Since it can not become a dragon warrior, then it is a good housekeeper, for the princess to build a warm and beautiful home.

  • 原文地址:https://www.cnblogs.com/ITflying/p/7261658.html