#{}與${}的區別


#{}與${}的區別

#{}
  是預編譯的方式,相當於jdbc的占位符PrepareStatement,

  一個#{}就是一個占位符

  mybatis在為#{}設置值時,會加引號


${} 模糊查詢時不用
  直接拼接的方式,不對數值做預編譯
  mybatis在為${}設置值時,不加引號
  存在sql注入的現象
只有在不支持占位符的時候才使用,比如需要列名的地方,同時獲取傳來的數據時要做校驗

 

例如:

查詢排序的處理
需要列名的地方,在原生jdbc開發中,不可以預編譯
因為預編譯會給值加上引號,需要列名的是直接進行拼接的

public List<Message> selectOrderBy(String column);
<include refid="BaseSql"/> order by #{column} desc 錯誤,沒排序

<include refid="BaseSql"/> order by ${column} desc
mybatis對原生sql不支持占位的地方,接收參數的話,用${}
${}是一個拼接sql的方式,存在SQL注入的現象
傳什么就拼什么

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM