mybatis將 # 解釋為jdbc prepared statement 的乙個【引數標記】。
而將 $ 解釋為 【字串替換】。
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注入。
5. $方式一般用於傳入資料庫物件,例如傳入表名.
6. 一般能用#的就別用$.
ps:在使用mybatis中還遇到的用法,在該符號內的語句,將【不會】被當成字串來處理,而是直接當成sql語句,比如要執行乙個儲存過程。
mybatis將 # 解釋為jdbc prepared statement 的 乙個 【引數標記。
而將 $ 解釋為 字串替換。
理解這兩者的區別是很有用的, 因為在某些sql語句中並不能使用引數標記(parameter markers)。
比如,我
們【不能】 在表名(table name)的位置使用【引數標記】。
假設有下面的**:
01.mapparms = new hashmap();
02.parms.put("table", "foo"); // 表名
03.parms.put("criteria", 37); // 查詢過濾條件
01.02. select * from $ where col1 = #
03.
mybatis生成的sql語句(prepared statement)如下所示:
01.select * from foo where col1 = ?
另外,字串替換在處理複雜型別也可能常常發生問題,如日期型別。由於這些因素,我們建議您盡可能地使用 # 這種方式。
mybatis 中 與 的區別
mybatis ibatis中 和 的區別 1.將傳入的資料都當成乙個字串,會對自動傳入的資料加乙個雙引號。如 order by user id 如果傳入的值是111,那麼解析成sql時的值為order by 111 如果傳入的值是id,則解析成的sql為order by id 2.將傳入的資料直接...
mybatis 中 與 的區別
mybatis ibatis中 和 的區別 1.將傳入的資料都當成乙個字串,會對自動傳入的資料加乙個雙引號。如 order by user id 如果傳入的值是111,那麼解析成sql時的值為order by 111 如果傳入的值是id,則解析成的sql為order by id 2.將傳入的資料直接...
mybatis 中 與 的區別
mybatis ibatis中 和 的區別 1.將傳入的資料都當成乙個字串,會對自動傳入的資料加乙個雙引號。如 order by user id 如果傳入的值是111,那麼解析成sql時的值為order by 111 如果傳入的值是id,則解析成的sql為order by id 2.將傳入的資料直接...