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