ibaits 多参数

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

你可能感兴趣的:(sql,bean,ibatis)