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