Ibatis中传List参数

Ibatis中用list传参数的方式 

Java代码  select count(id) from `user` where id in #[]# and status=1 " quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">  收藏代码
  1. <select id="getcount" parameterClass="java.util.ArrayList" resultClass="int">  
  2.         select count(id) from `user` where id in  
  3.         <iterate  open="(" close=")" conjunction="," >  
  4.            #[]#  
  5.         </iterate>  
  6.          and status=1  
  7.     </select>  

程序调用的方式 
Java代码   收藏代码
  1. public Integer getcount(List<Integer> friendsIds) throws SQLException {  
  2.        Integer count=(Integer)client.queryForObject("User.getcount", friendsIds);  
  3.        return count;  
  4.    }  


还可以在程序把list拼成String,用string当参数传给Ibatis查询,但是要注意在Ibatis的xml中要用 $parameter$来取参数,以保证Ibatis不改变参数的性质,如果用#parameter#取参数,此种传参的办法就不行了 
select count(id) from `user` where id in ($parameter$) 
 
ibatis 数组参数
 

用迭代来实现,用parameterClass 来接收然后通过<iterate>整个集合

Iterate的属性:
prepend 
 可被覆盖的SQL成部分,添加在句的前面(可
property 
 java.util.List的用于遍的元素(必
open 
 整个遍内容体始的字符串,用于定括号(可
close 
-整个遍内容体束的字符串,用于定括号(可
conjunction 
 次遍内容之的字符串,用于定ANDOR(可
<iterate>
  历类java.util.List的元素。

例子: 

User.xml

<select id="getUser" parameterClass="java.util.Map" resultClass="userModel">

<![CDATA[ select * from userinfo WHERE (userid in

]]>

  <iterate property="personList" open="(" close=")" conjunction=",">

    #personList[].userId#

<!--$personList[].userId$-->

           </iterate>

<![CDATA[

)

]]>

</select>

注意:使用<iterate>,在List元素名后面包括方括号[]非常重要,方括号[]标记为List,以防解析器简单地将 List出成String

(#) 使用的是PreparedStatement 机制,生成的SQL字符串中含有很多??会被动态的添加参数查询

($) 中的量好比字符串直接替

Dao.java

public UserModel getUser(UserModel userModel) throws SQLException {                      

Map<String, Object> map = new HashMap<String, Object>();

List<UserModel> list = new ArrayList<UserModel>();

UserModel userModel1 = new UserModel();

userModel1.setUserId("1");

list.add(userModel1);

UserModel userModel2 = new UserModel();

userModel2.setUserId("lsw");                                 

list.add(userModel2);    

map.put("personList", list);

List sqlUserModelList = getSqlMapClientTemplate().queryForList("getUser", map);

UserModel sqlUserModel = new UserModel();                     

return sqlUserModel;    }

你可能感兴趣的:(ibatis)