【轉】ibatis 多個參數的查詢

轉載自:http://yhjhappy234.blog.163.com/blog/static/31632832200982785927250/
作者:一線天色
作者博客:http://yhjhappy234.blog.163.com/

ibatis輸入多個參數軟件開發 2009-09-27 08:59:27 閱讀365 評論2 字號:大中小
在ibatis中,會發現其輸入參數只能有一個,於是當出現需要進行多個輸入參數的時候,就要想點辦法了,我看到的有以下兩種比較好的方法能夠解決這個問題
1) 用String代替
<select id="checkLogin" parameterClass="java.lang.String" resultClass="java.lang.Integer">
SELECT count(*) AS value FROM userinfo WHERE $sql$
</select>
比如如上的map statement代碼中,將輸入的參數設置爲String類型,而在select語句中直接使用該String,於是用戶可以在Java程序代碼中手工植入需要匹配的參數。

String sql = "uid = '" + username + "' and pwd='" + password + "'";
Integer r = (Integer) sqlMap.queryForObject("checkLogin", sql);

這個方法很簡單,但是弊端也很多。首先得需要用戶自己手動寫sql語句代碼在java中,這與ibatis的本質要將數據層的操作和業務邏輯操作分隔開來是違背的。其次,這個辦法可能會被利用造成sql injection的問題。比如在sql語句的最後加上一句;drop some table。這樣的結果顯而易見,就是災難性的。

2)用 Map
<select id="checkLogin2" parameterClass="java.util.Map" resultClass="java.lang.Integer">
SELECT count(*) AS value FROM userinfo WHERE uid=#uid# and pwd=#pwd#
</select>

這種辦法顯得要清楚的很多,也不需要自己手動編寫sql到java之中。
Map map=new HashMap();
map.put("uid", username);
map.put("pwd", password);
Integer r = (Integer) sqlMap.queryForObject("checkLogin2", map);

在java中首先生成需要的map,然後作爲輸入參數傳入即可。這個方法應該是比較好的,值得推薦。

3)也有人採用根據需要編寫javaBean的方法,但是這個方法的弊病在於如果你的邏輯操作涉及到很多的不同的屬性的組合,你就會浪費很多資源去生成各種各樣的bean。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章