mybatis中的 和 的使用規範

2022-09-04 20:00:13 字數 2227 閱讀 6540

mybatis 中 #{} 和 ${} 的區別

1、在mybatis 的對映配置檔案中,動態傳遞引數有兩種方式:

(1)#{} 佔位符

(2)${} 拼接符

2、#{} 和 ${} 的區別

(1)1)#{} 為引數佔位符 ?,即sql 預編譯

2)${} 為字串替換,即 sql 拼接

(2)1)#{}:動態解析 -> 預編譯 -> 執行

2)${}:動態解析 -> 編譯 -> 執行

(3)1)#{} 的變數替換是在dbms 中

2)${} 的變數替換是在 dbms 外

(4)1)變數替換後,#{} 對應的變數自動加上單引號 ''

2)變數替換後,${} 對應的變數不會加上單引號 ''

(5)1)#{} 能防止sql 注入

2)${} 不能防止sql 注入

3、#{} 和 ${} 的例項:假設傳入引數為 1

(1)開始

1)#{}:select * from t_user where uid=#

2)${}:select * from t_user where uid= '$'

(2)然後

1)#{}:select * from t_user where uid= ?

2)${}:select * from t_user where uid= '1'

(3)最後

1)#{}:select * from t_user where uid= '1'

2)${}:select * from t_user where uid= '1'

4、#{} 和 ${} 的大括號中的值

(1)單個引數的情形

1)#{}

無mybatis 預設值,可任意,且與引數名無關

<1>使用 mybatis 預設值 value,即 $

<2>使用自定義引數名,前提:在對映器介面方法的引數前加註解@param("")

(2)多個引數的情形

1)#{}

<1>使用mybatis 預設值 arg0、arg1、arg2 … 或 param1、param2、param3 …

<2>使用自定義引數名,前提:在對映器介面方法的引數前加註解@param("")

<1>使用mybatis 預設值 arg0、arg1、arg2 … 或 param1、param2、param3 …

<2>使用自定義引數名,前提:在對映器介面方法的引數前加註解@param("")

注:@param("") 是 @param(value="") 的簡寫

5、#{} 和 ${} 在使用中的技巧和建議

(1)不論是單個引數,還是多個引數,一律都建議使用註解@param("")

(2)能用 #{} 的地方就用 #{},不用或少用 ${}

(3)表名作引數時,必須用 ${}。如:select * from $

(4)order by 時,必須用 ${}。如:select * from t_user order by $

【#{}和${}的作用其他區別參照statement和preparestatement的編譯和預編譯的區別】

MyBatis中的使用

被這個標記所包含的內容將表示為純文字,比如表示文字內容 此標記用於xml文件中,我們先來看看使用轉義符的情況。我們知道,在xml中,等字元是不能直接存入的,否則xml語法檢查時會報錯,如果想在xml中使用這些符號,必須將其轉義為實體,如 這樣才能儲存進xml文件。在使用程式讀取的時候,解析器會自動將...

MyBatis 和 的使用

mybatis 和katex parse error expected eof got at position 30 y注入問題 簡單說 是經過預編譯的,是安全的,是未經過預編譯的,僅僅是取變數的值,是非安全的,存在sql注入.這裡先說一下只能的情況 ord erby 是肯定只 能用 的情況,ord...

mybatis中CDATA的使用

在使用mybatis 時我們sql是寫在xml 對映檔案中,如果寫的sql中有一些特殊的字元的話,在解析xml檔案的時候會被轉義,但我們不希望他被轉義,所以我們要使用來解決。是什麼,這是xml語法。在cdata內部的所有內容都會被解析器忽略。如果文字包含了很多的 字元 和 字元 就象程式 一樣,那麼...