Mybatis中 和 的區別及應用

2022-09-18 15:12:21 字數 1183 閱讀 7448

(一)#和$的區別

可以進行預編譯處理,會被當成?號,呼叫preparedstatement的set方法來賦值;

可以防止sql注入;

傳入的引數在sql中被看成乙個字串,會對傳入的資料自動加引號,例如:

select id,name,age from

user

where id =#;

當引數id傳入的值是「1」時,上述sql解析為:

select id,name,age from

user

where id =『1』;

不會進行預編譯處理,是普通的佔位符;

不能防止sql注入;

傳入的引數在sql中直接替換成變數的值,例如:

select id,name,age from

user

where id =$;

當引數id傳入的值是「1」時,上述sql解析為:

select id,name,age from

user

where id =

1;

(二)何時使用#{},何時使用${}?

大多數情況下還是經常使用#,一般能用#{}的就不用${}

既然#{}有預編譯功能,能防止sql 注入,那為什麼還要使用${}呢?請看下面sql語句能用#{}傳遞引數嗎?

select

*from #;

假如tablename傳入的值是user,那麼解析後的sql是這樣的:

select

*from

'user

';

到mysql控制台試一下,會報1064錯誤,這種情況下就必須使用${},還是上面的語句使用$傳參:

select

*from $;

解析後的sql可以正常執行:

select

*from

user;

凡是sql中不能新增引號的值動態傳參時都必須使用${},像order by,group by等。

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...