我們在使用iBATIS時會經常用到#和$這兩個符號。
一 .#與$區別說通俗一點就是
$中間的變量就是直接替換成值的
#會根據變量的類型來進行替換
比如articleTitle的類型是string, 值是"標題"的時候
$articleTitle$ = 標題
#articleTitle# = '標題'
二. $ 的作用實際上是字符串拼接,
select * from $tableName$
等效於
StringBuffer sb = new StringBuffer(256);
sb.append("select * from").append(tableName);
sb.toString();
#用於變量替換
select * from table where id = #id#
等效於
prepareStement =stmt.createPrepareStement("select * from table where id = ?")
prepareStement.setString(1,'abc');
三.那什么時候用$,什么時候 用 #
(1)對於變量部分, 應當使用#, 這樣可以有效的防止sql注入,具體執行時,# 都是用到了prepareStement,這樣對效率也有一定的提升
#方式一般用於傳入插入/更新的值或查詢/刪除的where條件
(2) $只是簡單的字符拼接而已,對於非變量部分, 那只能使用$, 實際上, 在很多場合,$也是有很多實際意義的
$方式一般用於傳入數據庫對象.例如傳入表名.
例如:
select * from $tableName$ 對於不同的表執行統一的查詢
update $tableName$ set name = #name# 每個實體一張表,改變不用實體的狀態
特別說明, $只是字符串拼接,所以要特別小心sql注入問題。
(3)能同時用#和$的時候最好用#