MyBatis中#{}和${}有哪些區別

前言

在MyBatis 的映射配置文件中,動態傳遞參數有兩種方式:

1、#{} 占位符

2、${} 拼接符

#{} 和 ${} 的區別

區別1

#{} 為參數占位符 ?,即sql 預編譯

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

區別2、

#{}:動態解析 -> 預編譯 -> 執行

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

區別 3、

#{} 的變量替換是在DBMS 中

${} 的變量替換是在 DBMS 外

區別 4、

變量替換後,#{} 對應的變量自動加上單引號''

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

區別 5、

#{} 能防止sql 註入

${} 不能防止sql 註入

#{} 和 ${} 的實例:假設傳入參數為 1

實例步驟一

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

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

實例步驟二

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

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

實例步驟三

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

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

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

單個參數的情形

#{}

在這裡插入圖片描述

${}

在這裡插入圖片描述
在這裡插入圖片描述

多個參數的情形 #{}

在這裡插入圖片描述
在這裡插入圖片描述

${}

在這裡插入圖片描述
在這裡插入圖片描述

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

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

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

3、表名作參數時,必須用${}。如:select * from ${tableName}

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

5、表名處用#{}會直接報錯;order by後面用#{}排序不生效

6、使用 ${} 時,要註意何時加或不加單引號,即${} 和 '${}'。一般字段類型為char或者varchar時需要加單引號

總結

到此這篇關於MyBatis中#{}和${}有哪些區別的文章就介紹到這瞭,更多相關MyBatis中#{}和${}區別內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: