ibatis 中 $與#的區別

在sql配置中比如in(#rewr#) 與in ($rewr$)

在Ibatis中我們使用SqlMap進行Sql查詢時需要引用參數,在參數引用中遇到的符號#和$之間的區分爲,#可以進行與編譯,進行類型匹配,而$不進行數據類型匹配,例如: 

select * from table where id = #id# ,其中如果字段id爲字符型,那麼#id#表示的就是'id'類型,如果id爲整型,那麼#id#就是id類型。 

select * from table where id = $id$ ,如果字段id爲整型,Sql語句就不會出錯,但是如果字段id爲字符型,那麼Sql語句應該寫成 select * from table where id = '$id$'


$ 的作用實際上是字符串拼接, 
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'); 

------------------------------------------------ 

說道這裏, 總結一下, 什麼時候用$,什麼時候 用 # 

對於變量部分, 應當使用#, 這樣可以有效的防止sql注入, 未來,# 都是用到了prepareStement,這樣對效率也有一定的提升 

$只是簡單的字符拼接而已,對於非變量部分, 那隻能使用$, 實際上, 在很多場合,$也是有很多實際意義的 
例如 
select * from $tableName$ 對於不同的表執行統一的查詢 
update $tableName$ set status = #status# 每個實體一張表,改變不用實體的狀態 
特別提醒一下, $只是字符串拼接, 所以要特別小心sql注入問題。 ----------------------------------------------------------------------------------------------------------------------------------------------------------- #:會幫你轉成參數本身的類型 $:你傳的是什麼就是什麼,不會因爲是字符串而給你加上''  
發佈了33 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章