zoukankan      html  css  js  c++  java
  • ibatis<iterate>标签

    <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,但是在结尾一定要加上"[]"


     

  • 相关阅读:
    CodeForces Gym 100500A A. Poetry Challenge DFS
    CDOJ 486 Good Morning 傻逼题
    CDOJ 483 Data Structure Problem DFS
    CDOJ 482 Charitable Exchange bfs
    CDOJ 481 Apparent Magnitude 水题
    Codeforces Gym 100637G G. #TheDress 暴力
    Gym 100637F F. The Pool for Lucky Ones 暴力
    Codeforces Gym 100637B B. Lunch 找规律
    Codeforces Gym 100637A A. Nano alarm-clocks 前缀和
    TC SRM 663 div2 B AABB 逆推
  • 原文地址:https://www.cnblogs.com/zouhong/p/9711979.html
Copyright © 2011-2022 走看看