iBatis動(dòng)態(tài)Sql解決In子句的替代方法
Posted on 2008-01-02 20:48 云自無(wú)心水自閑 閱讀(8583) 評(píng)論(3) 編輯 收藏 所屬分類(lèi): Java 、心得體會(huì)在iBatis中,對(duì)于in子句的標(biāo)準(zhǔn)做法是采用動(dòng)態(tài)sql來(lái)解決的。具體方法大致是:Java代碼傳入一個(gè)List或者數(shù)組,然后在sqlMapConfig映射中使用iterate循環(huán)取這個(gè)變量,動(dòng)態(tài)地生成sql語(yǔ)句。
這個(gè)標(biāo)準(zhǔn)解法的缺點(diǎn)是,使用起來(lái)比較麻煩
1. 需要在sqlMapConfig中使用動(dòng)態(tài)語(yǔ)句
2. 需要傳入一個(gè)Iterable的變量
對(duì)于這個(gè)問(wèn)題,我使用了一個(gè)偷懶的辦法,就是使用$標(biāo)記。
在iBatis中,普通的變量,比如:v,是使用#號(hào),在這個(gè)例子中,就是:#v#。
這樣,iBatis會(huì)使用prepareStatement,并對(duì)變量進(jìn)行變量綁定。
而$符號(hào)是簡(jiǎn)單替代的用法,在數(shù)據(jù)庫(kù)的執(zhí)行效率上要比前一種差。但優(yōu)點(diǎn)就是簡(jiǎn)單方便。
比如:
SELECT * FROM emp WHERE emp_no in ($empString$);
而empString的值就是1, 2, 3. 在Log中,可以看到,Sql語(yǔ)句就是:SELECT * FROM emp WHERE emp_no in (1,2,3)