ibatis 中 $与#的区别
生活随笔
收集整理的這篇文章主要介紹了
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注入問題。
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注入問題。
轉載于:https://www.cnblogs.com/highfly2012/p/3203660.html
總結
以上是生活随笔為你收集整理的ibatis 中 $与#的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spoj 2 Prime Generat
- 下一篇: poj 2507Crossed ladd