order by 字段,在用動態sql時會出現問題,排序無效,並且在日誌裏查詢不到,不能發現這個錯誤。sql
一般,我們的動態sql通常都會用#代替$,由於#能夠防止sql注入問題。數據庫
可是在order by的字段裏,若是繼續用#,那麼排序會無效。這個時候只能用$代替#。日誌
1.#將傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號。如:order by #{user_id},若是傳入的值是111,那麼解析成sql時的值爲order by "111", 若是傳入的值是id,則解析成的sql爲order by "id"。對象
2.$$將傳入的數據直接顯示生成在sql中。如:order by ${user_id},若是傳入的值是111,那麼解析成sql時的值爲order by 111, 若是傳入的值是id,則解析成的sql爲order by id。排序
3.#方式可以很大程度防止sql注入。字符串
4.$方式沒法防止Sql注入。sql注入
5.$方式通常用於傳入數據庫對象,例如傳入表名。數據
6.通常能用#的就別用$。查詢