ibatis輸入多個參數


ibatis輸入多個參數  

 
 
在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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM