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 (?,?,?)
  • 相关阅读:
    纯css切换左侧菜单
    HDU——T 1556 Color the ball
    CODEVS——T 1404 字符串匹配
    HDU——T 1506 Largest Rectangle in a Histogram|| POJ——T 2559 Largest Rectangle in a Histogram
    BZOJ——T 1113: [Poi2008]海报PLA
    POJ——T 2796 Feel Good
    November 27th 2016 Week 48th Sunday
    November 26th 2016 Week 48th Saturday
    November 25th 2016 Week 48th Friday
    November 24th 2016 Week 48th Thursday
  • 原文地址:https://www.cnblogs.com/m170981362621/p/15267054.html
Copyright © 2011-2022 走看看