在 MyBatis 中 #{} 和 ${} 的区别:
#{} 是占位符,做预编译处理,MyBatis在处理 #{ } 时,会将 SQL 中的 #{ } 编译为 ?,对应的变量自动加单引号,能够有效防止 SQL 注入;
${} 是拼接符,即字符串替换,MyBatis 在处理 ${ } 时,就是把 ${ } 替换成变量的值。
注意:尽量使用 #{ } ,不用或少用 ${ };当传的参数为表名时,或者使用 order by ${ }时 ,必须用 ${ }。
SQL 注入(了解):
SQL 注入是一种将 SQL 语句插入到用户的输入参数中,之后再将这些参数传递给后台的 SQL 服务器加以解析执行。是一种注入攻击,可以恶意执行 SQL 语句。攻击者可以使用SQL 注入漏洞绕过应用程序的安全措施,检索整个数据库的内容,还可以添加、删除和修改数据库中的记录。