mybatis的#{}和${}的区别和底层实现
${} (Statement实现):
1、只是简单的替换,传递的参数会被当成sql语句中的一部分(不能防止sql注入)
2、建议like和order by后使用
#{} (PreprareStatement实现):
1、解析为一个 '?'占位符号,会对自动传入的数据加一个双引号(可以防止sql注入)
预编译的机制:预编译是提前对SQL编译之前进行预编译,而其后注入的参数将不会再进行编译。因为SQL注入是发生在编译的过程中,因为恶意注入了某些特殊字符,最后被编译成了恶意的执行操作。所以预编译机制则可以很好的防止SQL注入