MyBatis排序時使用order by動態參數時須要注意用$而不是#java
字符串替換,默認狀況下,使用#{}格式的語法會致使MyBatis建立預處理語句屬性並以它爲背景設置安全的值(好比?)這樣作很安全,很迅速也是首選作法,有時你只是想直接在SQL語句中插入一個不改變的字符串。好比,像ORDER BY,你能夠這樣來使用:ORDER BY ${columnName},這裏MyBatis不會修改或轉義字符串。sql
接受從用戶輸出的內容並提供給語句中不變的字符串這樣作是不安全的,這會致使潛在的SQL注入攻擊,所以你不該該容許用戶輸入這些字段或者一般自行轉義並檢查。安全
實際開發中會用的$有分頁,排序,like模糊查詢等。code
實際開發中,若動態查詢表名,列名,拼接的sql則必須用$,不然會解析異常。如:排序
<!-- 查詢檔案檢索字段 --> <select id="getEspData" parameterType="java.util.Map" resultType="java.util.Map"> select ${fields} from ${tableName} where ID = #{id} </select>