Mybatis变量绑定不当引发的性能隐患

Mybatis变量绑定不当引发的性能隐患

   在value值中,我们用到了mybatis的变量绑定。用的是#{}方式,还有一种方式${}。
默认情况下,使用#{}语法,MyBatis会用PreparedStatement语句当做占位符,并且安全的设置PreparedStatement参数,可以避免SQL注入漏洞和钓鱼漏洞,
这个过程中MyBatis会进行必要的安全检查和转义。

示例1:用#{}
执行SQL:SELECT  *  from member_info  where member_name = #{memberName}
参数:memberName=>Mynah
解析后执行的SQL:SELECT * from member_info  where member_name = ?

示例2:用${}
执行SQL:Select * from member_info  where member_name = ${memberName}
参数:memberName传入值为:Mynah
解析后执行的SQL:Select  *  from  member_info  where member_name  = Mynah


可以看出,${}方式影响SQL语句的预编译,编译器解析时会进行硬解析,会造成很多临时游标变量的绑定,导致数据库性能下降。
所以从安全性和性能的角度出发,能使用#{}的情况下就不要使用${}

你可能感兴趣的:(Mybatis)