1.对于多参数的问题:

在ibatis中,会发现其输入参数只能有一个,于是当出现需要进行多个输入参数的时候,就要想点办法了,我看到的有以下两种比较好的方法能够解决这个问题
用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。这样的结果显而易见,就是灾难性的。用 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,然后作为输入参数传入即可。这个方法应该是比较好的,值得推荐。情形二: 
在方法体里:我们把多个参数存放在map里,然后在前面获得它:
Map map = new HashMap();
map.put("userid", userid);
map.put("name", name);cardList = (List)sqlMapClient.queryForList("findByName", map);
在SQL语句中:
<select id="findByName" parameterClass="java.util.Map" resultClass="Card">
select * from cardinfo where userid=#userid# and name like '$name$'
</select>这样就可以将多个参数传过去了。
 
2.ibatis动态update:
情形一
<update id="updateUser" parameterClass="user">     
      update user   
       <dynamic prepend="set">   
           <isNotNull prepend="," property="username">             
                username=#username#   
            </isNotNull>   
           <isNotNull prepend="," property="password">             
                password=#password#   
            </isNotNull>   
       </dynamic>   
      where id=#id#     
</update>  情形二
<update id="updateUser" parameterClass="user">       
     update table       
      set ID=#ID#      
     <isNotEmpty prepend="," property="name">     
         NAME=#name#      
     </isNotEmpty>     
     <isNotEmpty prepend="," property="pwd">     
         PWD=#pwd#      
     </isNotEmpty>     
     <isNotEmpty prepend="," property="add">     
         ADD=#add#       
     </isNotEmpty>     
      where ID=#ID#      
</update>

3.ibatis中的#和$的使用区别:

在Ibatis中我们使用SqlMap进行Sql查询时需要引用参数,在参数引用中遇到的符号#和$之间的区分为,#可以进行编译,进行类型匹配,而$不进行数据类型匹配,例如:

select * from table where id = #id# ,其中如果字段id为字符型,那么#id#表示的就是'id'类型,如果id为整型,那么#id#就是id类型。 
select * from table where id = $id$ ,如果字段id为整型,Sql语句就不会出错,但是如果字段id为字符型,那么Sql语句应该写成 select * from table where id = '$id$'

说通俗一点就是:

$中间的变量就是直接替换成值的 
  #会根据变量的类型来进行替换 
  比如articleTitle的类型是string, 值是"标题"的时候 
  $articleTitle$ = 标题 
  #articleTitle# = '标题'