mybatis 中 與 的區別

2021-07-09 18:00:01 字數 1147 閱讀 6385

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.將傳入的資料直接...