#{}:佔位符號,好處防止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中呢?這裡就需要慎重考...