<iterate  property=""

从传入的参数集合中使用属性名去获取值,   这个必须是一个List类型,   否则会出现OutofRangeException,    通常是参数使用java.util.Map时才使用,   如果传入的参数本身是一个java.util.List, 不能只用这个属性.

conjunction=""   /*可选,   iterate可以看作是一个循环,   这个属性指定每一次循环结束后添加的符号,    比如使每次循环是OR的, 则设置这个属性为OR*/

open="" /*可选, 循环的开始符号*/

close="" /*可选, 循环的结束符号*/

prepend="" /*可选, 加在open指定的符号之前的符号*/

--批量删除对象的时候,iterate不要property属性 -->

<delete id="delStudybook" parameterClass="java.util.List">

  delete FROM STUDYBOOK WHERE ID IN

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

  #bookList[]#

</iterate>

</delete>

注意要property的错误

Caused by: com.ibatis.common.beans.ProbeException: Error getting ordinal list from JavaBean. Cause java.lang.StringIndexOutOfBoundsException: String index out of range: -1

//另外:如果parameterClass="java.util.List"类型不匹配的话

报错Caused by: java.sql.SQLException: Invalid parameter object type.  Expected 'java.util.Map' but found 'java.util.ArrayList'.

<!--批量修改对象,iterate必须包括property属性-->

<update id="updateUsersIterate" parameterClass="java.util.Map">

  update users set user_name=#userInfo.user_name# where user_id in

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

  #list[]#

</iterate>

</update>

注意:不要property属性的错误

Cause: com.ibatis.sqlmap.client.SqlMapException: ParameterObject or property was not a Collection, Array or Iterator.

<!-- Iterate的使用,根据多个匹配条件查询,类似in(a,b,c)-->

<select id="selectByIterate" parameterClass="java.util.List" resultClass="user">

  SELECT * FROM USERS WHERE USER_ID IN

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

  #ids[]#

</iterate>

</select>

注意:不要property属性,否则报错。String index out of range: -1

2. 但是,若参数有多个传入, 一个是List,另一个不是, parameterClass为map时,需要property属性区分要遍历的  集合。

总结一下:就是如果<select><delete><update><insert>元素中含有parameterClass属性,并且该属性为map或是bean类型的时候,则在<iterate>元素中需要使用property属性,来指定在parameterClass所指对象中的某个属性(bean)或键(map);

如果不是map或bean时,例如是list类型的parameterClass的时候,则不需要property属性,在<iterate>可以直接使用这个list类型作为参数,并且参数"##"中可以为任何标识符,而不一定是value,但是在结尾一定要加上"[]"


 

ibatis<iterate>标签的更多相关文章

  1. iBatisNet 中 iterate标签的使用

    <iterate>标签,顾名思义是用来遍历标签用的. 支持的属性如下: 属性 说明 是否必选 open 遍历后生成的这些sql,开始的第一个符号 可选 close 遍历后生成的这些sql, ...

  2. 使用struts的logic:iterate标签遍历列表时得到显示序号

    <logic:notEmpty name="sList" scope="request"> <logic:iterate id="e ...

  3. ibatis 常用标签

    prepend:自动在前面加上:自动新手:自动预:自动前置 property:属性 compareValue:指定的常数,值 //判断不相等: <isNotEqual prepend=" ...

  4. ibatis XML标签的含义

    selectKey: 有3个主要的属性:     1)resultClass:返回的主键的数据类型,跟sqlMap中的数据类型一致:     2)type:表示主键在insert之前或之后生成(取决于 ...

  5. ibatis 中动态SQL查询和动态标签嵌套的使用

    ibatis 动态查询对于从事 Java EE 的开发人员来说,iBatis 是一个再熟悉不过的持久层框架了,在 Hibernate.JPA 这样的一站式对象 / 关系映射(O/R Mapping)解 ...

  6. oracle+ibatis 批量插入-支持序列自增

    首先请先看我前面一篇帖子了解oracle批量插入的sql:[oracle 批量插入-支持序列自增] 我用的ibatis2.0,sqlMap文件引入的标签如下: <!DOCTYPE sqlMap ...

  7. ibatis批量操作补充

    ibatis批量操作  这文章的补充吧. review代码的时候发现一个页面应用排序设置功能,原先代码中,进行了循环update实现.虽然应用较少,不过无谓浪费数据库链接实在不是一个好的想法. 所以, ...

  8. ibatis传入数组或List

    小结一下ibatis框架下,传入参数为数组类型或者是List类型的sql写法.标签里面都不需要表名 1.传入字符串数组,不需要标明parameterClasss,数组和List类型对象一样都可以用&l ...

  9. ibatis CDATA

    在使用ibatis时,经常需要配置待执行的sql语句.使用过ibatis的朋友都知道,无可避免的都会碰到一些不兼容.冲突的字符,多数人也都知道用<![CDATA[   ]]>标记避免Sql ...

随机推荐

  1. 在net Core3.1上基于winform实现依赖注入实例

    目录 在net Core3.1上基于winform实现依赖注入实例 1.背景 2.依赖注入 2.1依赖注入是什么? 2.1依赖注入的目的 2.2依赖注入带来的好处 2.2.1生命周期的控制 2.2.2 ...

  2. redis之漏斗限流

    Redis 4.0 提供了一个限流 Redis 模块,它叫 redis-cell.该模块也使用了漏斗算法,并提供了原子的限流指令.有了这个模块,限流问题就非常简单了.

  3. redis命令之 ----Set(集合)

    SADD SADD key member [member ...] 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略. 假如 key 不存在,则创 ...

  4. 在.net中读写config文件的各种方法【转】

    今天谈谈在.net中读写config文件的各种方法. 在这篇博客中,我将介绍各种配置文件的读写操作. 由于内容较为直观,因此没有过多的空道理,只有实实在在的演示代码, 目的只为了再现实战开发中的各种场 ...

  5. WinForm 窗体间传递数据

    前言 做项目的时候,winfrom因为没有B/S的缓存机制,窗体间传递数据没有B/S页面传递数据那么方便,今天我们就说下winfrom中窗体传值的几种方式. 共有字段传递 共有字段传递实现起来很方便, ...

  6. 超详细国外VPS搭建教程

    vps文章请访问我的github:https://github.com/pig6/vps

  7. S-T-E-A-M Science Technology Engineering Art Mathematics 五种思维模式

    S-T-E-A-M五个英文字母分别代表 Science 科学,Technology 技术,Engineering 工程,Art 艺术以及 Mathematics 数学.它们并不是简单地整合原来的分科体 ...

  8. .NET工程师的书单

    短暂的假期里抽空整理了一份书单,以个人的见解这些应该是值得.NET工程师至少去看一遍的书籍.但所罗列的仅包括国内目前已出版的国外书籍的英文版,并不包含中文翻译及相关领域的中文书籍.这里没有任何歧视之意 ...

  9. 转 tty 设备读写

    转自https://feng-qi.github.io/2017/05/04/how-to-read-write-to-tty-device/ <p>这是 StackExchange 上的 ...

  10. ASP.NET Core系列:JWT身份认证

    1. JWT概述 JSON Web Token(JWT)是目前流行的跨域身份验证解决方案. JWT的官网地址:https://jwt.io JWT的实现方式是将用户信息存储在客户端,服务端不进行保存. ...