Ibatis中用list传参数的方式。

Java代码  select count(id) from `user` where id in #[]# and status=1 。

 <select id="getcount" parameterClass="java.util.ArrayList" resultClass="int">
select count(id) from `user` where id in
<iterate open="(" close=")" conjunction="," >
#[]#
</iterate>
and status=1
</select>

程序调用的方式

java代码

 public Integer getcount(List<Integer> friendsIds) throws SQLException {
Integer count(Integer)client.queryForObject("User.getcount", friendsIds);
return count;
}

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

ibatis 数组参数
 

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

Iterate的属性:
prepend - 可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property - 类型为java.util.List的用于遍历的元素(必选)
open - 整个遍历内容体开始的字符串,用于定义括号(可选)
close -整个遍历内容体结束的字符串,用于定义括号(可选)
conjunction - 每次遍历内容之间的字符串,用于定义AND或OR(可选)
<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中传List参数的更多相关文章

  1. 火狐浏览器URL中传中文参数乱码问题

    火狐浏览器:前端页面传中文 <span data-bind=" check_action:'roleMenuPriv'"> <a data-bind=" ...

  2. postman 模拟请求中添加 header,post请求中传json参数

    1. GET 请求 2.Post 请求 (请求参数为Json,header中带有参数) 问题延伸 GET请求不能够 添加 Body 吗?[答案]

  3. ibatis中in语句参数传入方法

    第一种:传入参数仅有数组,iterate中不能有数组的属性名       <select id="GetEmailList_Test"  resultClass=" ...

  4. JS在路径中传中文参数

    需要用 encodeURI('中文');处理一下.

  5. AJAX在GBK编码页面中传中文参数乱码的问题

    ---恢复内容开始--- 页面编码是GBK的情况下传递中文有乱码,解决方法如下: 在ajax传递前用若是Array,JSON,等其它对象,可用JSON.stringfy字符串序列化后,赋值给ajax传 ...

  6. js onclick函数中传字符串参数的问题

    规则: 外变是“”,里面就是‘’外边是‘’,里边就是“”   示例: var a="111"; var html="<a onclick='selecthoods( ...

  7. 把连接中传的参数截取出来变成一个json对象

    获取url function test() { var url=window.location.search; if(url.indexOf("?")!=-1) { var str ...

  8. swift向方法传数组参数的语法

    总是记不住向方法中传数组参数的语法,所以记录一下. func calculateStatistics(scores:[Int]) -> (min:Int,max:Int,sum:Int) { v ...

  9. 使用ibatis时 sql中 in 的参数赋值

    一.问题描述: 1.在使用ibatis执行下面的sql: update jc_jiesuan set doing_time = unix_timestamp(curdate()),doing_stat ...

随机推荐

  1. 记一次linux服务器问题处理过程

    本周二的时候,涛哥找我,说明了一件事,在安装ganglia的时候,发生的一个问题. 在一台suse 10 sp1的服务器上,安装ganglia的一个依赖包,libconfuse.rpm,安装完成之后, ...

  2. python中BeautifulSoup库中find函数

    http://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html#contents 简单的用法: find(name, at ...

  3. 创建自定义的Cocos2d-x场景

    操作步骤 1.创建cocos2d-x工程 2.新建 Scene1.cpp Scene1.h Scene1.h代码 #ifndef __SCENE1_H__#define __SCENE1_H__ #i ...

  4. 十个Flex/Air疑难杂症及解决方案简略

    十个Flex/Air疑难杂症及解决方案简略 转自http://blog.sban.us/40.html 最近去一家台企,对方给我出了十道“难道”:在TileList中如果選擇檔過多,會出現捲軸,當拖動 ...

  5. java 15 - 9 集合框架之 栈、队列、数组 和 链表

  6. 第二章 下山遇虎(@helper)

    @helper方法定义 使用@helper关键字可以定义一个方法,这样就可以在页面中调 用这个方法了,和C#中的方法一样.在页面中定义的方法可以访问ViewBag,HttpContext等等页面的属性 ...

  7. zabbix(sql注入判断脚本)

    zabbix(sql注入判断脚本) #-*-coding:utf-8-*- # code by anyun.org import urllib import re def getHtml(url): ...

  8. webapi 获取请求参数

    //获取请求消息提数据 Stream stream = filterContext.Request.Content.ReadAsStreamAsync().Result; Encoding encod ...

  9. 高性能网站性能优化与系统架构(ZT)

    转载请保留出处:俊麟 Michael’s blog (http://space.itpub.net/7311285/viewspace-97) 我在CERNET做过拨号接入平台的搭建,而后在Yahoo ...

  10. sys.stdin的三种方式

    1. for line in sys.stdin: import sys sys.stdout.write('根据两点坐标计算直线斜率k,截距b:\n') for line in sys.stdin: ...