Mybatis中的#和$的区别:
1、#
通过日志查看:
因为MyBatis启用了预编译功能,在SQL执行前,会先将上面的SQL发送给数据库进行编译;执行时,直接使用编译好的SQL,替换占位符“?”就可以了。因为SQL注入只能对编译过程起作用,所以这样的方式就很好地避免了SQL注入的问题。
2、$
通过日志查看:
在MyBatis中,“${id}”这样格式的参数会直接参与SQL编译,从而不能避免注入攻击。但涉及到动态表名和列名时,只能使用“${id}”这样的参数格式。所以,这样的参数需要我们在代码中手工进行过滤处理来防止注入。