MyBatis原理 注意點

2022-05-09 09:12:10 字數 1023 閱讀 1011

#{}:佔位符號,好處防止sql注入

${}:sql拼接符號

動態 sql 是 mybatis 的強大特性之一,也是它優於其他 orm 框架的乙個重要原因。mybatis 在對 sql 語句進行預編譯之前,會對 sql 進行動態解析,解析為乙個 boundsql 物件,也是在此處對動態 sql 進行處理的。在動態 sql 解析階段, # 和 $ 會有不同的表現。

select * from user where name = #;

動態解析為:

select * from user where name = ?;

乙個 # 被解析為乙個引數佔位符 ? 。

而$ 僅僅為乙個純碎的 string 替換,在動態 sql 解析階段將會進行變數替換。

select * from user where name = $;

動態解析為, 當我們傳遞的引數為 "jack" 時,上述 sql 的解析為:

select * from user where name = "jack";

綜上所得, $ 變數的替換階段是在動態 sql 解析階段,而 #變數的替換是在 dbms 中。

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 user_id, 如果傳入的值是id,則解析成的sql為order by id.

3. #方式能夠很大程度防止sql注入。 

4.$方式無法防止sql注入。

5.$方式一般用於傳入資料庫物件,例如傳入表名.

6.一般能用#的就別用$.

mybatis排序時使用order by 動態引數時需要注意,用$而不是#

Detour注意點及原理

detourtransactionbegin detourupdatethread getcurrentthread detourattach pvoid g ppresent,new present dword nerr detourtransactioncommit detourtransact...

Detour注意點及原理

cpp view plain copy detourtransactionbegin detourupdatethread getcurrentthread detourattach pvoid g ppresent,new present dword nerr detourtransactionc...

mybatis二級快取注意點

一 注意點一 這個是必須要考慮的,也就是常說的 業務隔離。mybatis的二級快取是對應到 namespace的,所以重新整理快取,只會對當前的namespace有效。現在有個業務 在角色下新增使用者。緊接著,需要查詢某個角色下的使用者。那這個查詢使用者的方法 是放在哪個xml中呢?這裡就需要慎重考...