mybatis動態sql排序無效,$ 代替 #

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.通常能用#的就別用$。查詢

相關文章
相關標籤/搜索