我們在使用iBATIS時會經常用到#這個符號。
比如:
傳遞的id為1,2,3。但是數據卻沒有任何的修改。
后來查找了半天,原來原因就是這個#的問題。因為iBATIS默認會把“#”中間的變量作為字符串來處理。這樣,就會出現這樣的SQL
這樣的SQL數據庫當然是不會執(zhí)行的。那我們只有繞開iBATIS了嗎?
其實不用,iBATIS其實還提供了另外一種方式,那就是使用$來傳遞值。你使用$將你的變量括起來,iBATIS不會給這個變量做任何的處理,直接生成你要的SQL
sql 代碼
還可以用ibatis的iterate解決:
SQL:
<select id="test" parameterClass="java.util.List" resultClass="test.Roadline"> select * from SYS_ROAD_LINE_INFO where ROAD_LINE_NO in <iterate open="(" close=")" conjunction=","> #value[]# </iterate></select>
java:
List list = new ArrayList();list.add("aaa");list.add("bbb"); List rsList = sqlMap.queryForList("roadline.test", list);
生成的sql:
$中間的變量就是直接替換成值的
#會根據變量的類型來進行替換
比如articleTitle的類型是string, 值是"標題"的時候
$articleTitle$ = 標題
#articleTitle# = '標題'
如果一個字段的名字不規(guī)范帶有#,那么在<select ...> select name# from reader where id=#id#...</select>語句中會報錯,我看過有人問過這個問題,說是name####但是還是不能解決無法對帶#的字段的查詢。 解決辦法肯定是有的。比如,你可以把這個字段當做一個參數來傳遞給ibatis。然后用$$把這個變量括起來。