Mybatis通过预编译防止SQL注入不是单引号

点击:119  日期:2021-10-07 16:56:31.0 [程序源码]

网上不知怎么对于Mybatis防止SQL注入的解释主要都是说自动加单引号,我还特地打印了日志查看,对于#{} 型参数Mybatis是将sql进行预编译用?号占位符,然后底层再使用PreparedStatement的set方法进行参数设置。${} 将传入的数据直接将参数拼接在sql中。因此,#与$相比,#可以很大程度的防止sql注入,因为对sql做了预编译处理,因此在使用中一般使用#{}方式。 

不是加单引号!不是加单引号!!不是加单引号!!!

Mybatis 在调用 connection 进行 sql 预编译之前,会对sql语句进行动态解析,动态解析主要包含如下的功能:占位符的处理,动态sql的处理,参数类型校验

Mybatis 默认情况下,将对所有的 sql 进行预编译