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