mybatis预编译


 内容源于

https://blog.csdn.net/weixin_34452850/article/details/88991943   和

https://blog.csdn.net/LoveInWar/article/details/89646085 总结

 

简单来说 #{} 在预编译时将参数 使用占位符 ? 代替,然后再实际执行时,会在value左右加入引号,以字符串的方式处理。这样 就可以防止恶意的sql注入

select * from user where username = "10000 or 1 = 1";

而 ${} 只是简单的字符串替换,这样sql会变成

select * from user where username = 10000 or 1 = 1;

因为 1 = 1恒成立,那么不管username是否等于10000 ,都可以查询到所有的数据。这样sql就被恶意注入了。

 

Mybatis的预编译会将编译后的SQL缓存起来,再次遇到相同的SQL会直接使用不会再次编译

预编译阶段可以对sql语句进行优化;
预编译可以将多个操作步骤合并成一个步骤,一般而言,越复杂的sql,编译程度也会复杂,难度大,耗时,费性
能,而预编译可以合并这些操作,预编译之后DBMS可以省去编译直接运行sql。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM