1. 程式人生 > >mybatis ${} 和 #{}

mybatis ${} 和 #{}

                mybatis#{}和¥{}區別

${} :是做字串拼接不能防止sql注入。並且單個引數時${這裡面必須是value},

  如果引數時字串時需要在${}前後加上單引號。         

  

  假設通過名稱查詢user 表    

    注入漏洞sql:select * from user where username = '${value}' ,如果${value} 中

      value= “ aa ' or 'a' = 'a ” 此時就可以忽略查詢條件直接將所有的使用者資訊查詢出。

 

#{}:是佔位符,可以有效的防止sql注入,如果引數是字元型別時會在引數兩邊加上單引號。

  如果引數是一個#{隨意寫},如果是物件就需要#{java bean 屬性名}

 

  sql注入問題:看到這裡小夥伴們肯定要說如果用#{}傳入上面同樣的引數也會出現這樣的問題,

  其實不然。此時就需要區分兩者的機制了。#{}是會進行預編譯的, 因此#{}裡面的引數不會進行SQL編輯,

  僅僅只是把裡面的值當成一個引數。而${}是先變成生sql字串再進行SQL編譯,因此會造成生sql注入。

 

  由於是本人親自編寫,未經允許請勿轉載。聯絡方式:qq2580052864