mybatis #和$的区别

#$的区别

#是占位符,在DBMS才进行替换,在预编译时使用?占位,能防止sql注入;
$是拼接符,在动态sql解析阶段将会进行变量替换,有可能会引发sql注入,如:

select * from ${tableName} where name = #{name} 

参数 tableName 为 user; delete user; --,那么动态解析之后,预编译之前,将变为

select * from user; delete user; -- where name = ?; 

能用#就不要用$

$有可能引发sql注入问题,其次,相同的预编译能重复利用,而是用#会比较容易遇到相同的预编译;

表名必须用$

因为使用#替换字符串时,会带上单引号,但是表名不能待用单引号(反引号例外)
PS:sql 预编译指的是数据库驱动在发送 sql 语句和参数给 DBMS 之前对 sql 语句进行编译,这样 DBMS 执行 sql 时,就不需要重新编译。

posted @ 2018-03-23 01:18  zeling  阅读(801)  评论(0编辑  收藏  举报