zoukankan      html  css  js  c++  java
  • MyBatis xml foreach循环语句

    MyBatis很好的支持批量插入,使用foreach即可满足

    首先创建DAO方法:

    package com.youkeda.comment.dao;
    
    import com.youkeda.comment.dataobject.UserDO;
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Param;
    
    import java.time.LocalDateTime;
    import java.util.List;
    
    //fhadmin.cn
    @Mapper
    public interface UserDAO {
    
        int batchAdd(@Param("list") List<UserDO> userDOs);
    
    }
    
    <insert id="batchAdd" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO user (user_name, pwd, nick_name,avatar,gmt_created,gmt_modified)
        VALUES
        <foreach collection="list" item="it" index="index" separator =",">
            (#{it.userName}, #{it.pwd}, #{it.nickName}, #{it.avatar},now(),now())
        </foreach >
    </insert>
    

    foreach相当于执行力java的for循环,他的属性:

    collection指定集合的上下文参数名称比如这里的@Param("list")
    item指定遍历的每一个数据的变量,一般叫it,可以使用it.userName来获取具体的值
    index集合的索引值,从0开始
    separator遍历每条记录并添加分隔符
    除了批量插入,使用SQL in查询多个用户时也会使用:

    package com.youkeda.comment.dao;
    
    import com.youkeda.comment.dataobject.UserDO;
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Param;
    
    import java.time.LocalDateTime;
    import java.util.List;
    
    //fhadmin.cn
    @Mapper
    public interface UserDAO {
    
        List<UserDO> findByIds(@Param("ids") List<Long> ids);
    
    }
    
    <select id="findByIds" resultMap="userResultMap">
        select * from user
        <where>
            id in
            <foreach item="item" index="index" collection="ids"
                        open="(" separator="," close=")">
                #{item}
            </foreach>
        </where>
    </select>
    
    • open

    表示的是节点开始时自定义的分隔符

    • close

    表示是节点结束时自定义的分隔符

    执行后会变成:

    select * from user where id in (?,?,?)
  • 相关阅读:
    【费用流】【CODEVS】1227 方格取数2
    【CODEVS】1034 家园
    【BZOJ】1066: [SCOI2007]蜥蜴
    【最大流】【CODEVS】1993 草地排水
    【HDU】2191 多重背包问题
    【TYVJ】1520 树的直径
    【BZOJ】1984 月下“毛景树”
    【BZOJ】1588: [HNOI2002]营业额统计
    【NOI】2004 郁闷的出纳员
    【POJ】2892 Tunnel Warfare
  • 原文地址:https://www.cnblogs.com/m170981362621/p/15267054.html
Copyright © 2011-2022 走看看