在MyBatis中,#{}和${}都是用來表示參數的占位符,但它們之間有一些差異:
- #{}是用來表示一個參數占位符,MyBatis會將#{}替換成一個問號(?),并通過PreparedStatement設置參數來防止SQL注入。#{}可以防止SQL注入攻擊,因為參數值會被自動轉義。
示例:select * from user where id = #{userId}
- ${}是用來表示直接替換參數的占位符,MyBatis會將${}替換成參數的實際值,而不是一個問號(?)。使用${}可能會導致SQL注入攻擊,因為參數值不會被轉義。
示例:select * from user where name = '${userName}'
因此,為了避免SQL注入攻擊,推薦使用#{}來表示參數占位符。