MyBatis中 和 的區別

2021-09-01 06:02:17 字數 1015 閱讀 9796

mybatis中#$都可以用來動態傳遞引數,補全sql語句,但它們區別也很明顯。

(1)#在sql中相當於乙個引數佔位符「?」,用來補全預編譯語句。它補全預編譯語句時,可以理解為在此引數值兩端加了單引號。舉例如下,當需要動態的按id查詢使用者資訊時。

select

*from my_user where id =

#;

如果我們為id賦值為1,這條sql執行效果相當於下面的sql。

select

*from my_user where id =

'1';

由於預編譯sql使用preparedstatement物件抽象預編譯語句,之後使用也無需再次編譯,而且能夠防止注入式攻擊,所以只要能夠使用#解決的地方,我們都應該使用#

(2)$就是單純的字串拼接,拼接完成後才會對sql進行編譯、執行,所以效能較低,也無法復用。但是在有些#無法勝任的地方,還是會需要$來完成。比如當sql中資料庫表名為引數時,如果使用#,如下所示。

select

*from

#;

當我們為tablename賦值為"my_user"時,相當於執行以下sql。

select

*from

'my_user'

;

由於表名不能加單引號,所以語法錯誤。這時候就需要使用$來進行字串拼接。

select

*from $;

為tablename賦值為"my_user"後,相當於執行以下sql。

select

*from my_user;

myBatis中 和 區別

1.將傳入的資料都當成乙個字串,會對自動傳入的資料加乙個雙引號。如 order by user id 如果傳入的值是111,那麼解析成sql時的值為order by 111 如果傳入的值是id,則解析成的sql為order by id 2.將傳入的資料直接顯示生成在sql中。如 order by u...

mybatis 中 和 區別

在使用mybatis 框架時 在xml的配置檔案中,通常是使用 來獲取數值的 如 select from t user inf where id 這時 如果你傳入的值為zhangsan 則會編譯成為 select from t user inf where id zhangsan mybatis 會...

Mybatis 中 和 區別

號與 區別 號表示引數,代表乙個字串。如 select a,b,c from table1 where id value 傳入引數後如 value 1 則可生成 select a,b,c from table1 where id 1 select a,b,c from table1 where ci...