Mybatis之foreach标签的使用

时间:2025-04-26 08:17:33

本帖主要分享mybatis的批量操作,由于工作繁忙暂不对标签进行讲解

本人不推荐在for循环中进行数据库操作,因为会进行大量的io操作,导致查询性能极差,并对数据库造成压力,

1.根据id进行批量查询

实现类层

    @Override
    public List<User> selectUserByIds() {
        Integer[] ids = {1, 4};
        return (ids);
    }

mapper接口

    /**
     * 批量查询
     * @param ids 用户信息
     * @return 用户信息列表
     */
    List<User> selectUserByIds(Integer[] ids);

xml文件

    <select  resultType="">
        SELECT id, username, password, phone, email, status, created, updated
        FROM
        user
        where
        id
        in
        <foreach  collection="array" item="ids" open="(" close=")" separator=",">
            (#{ids})
        </foreach>
    </select>

简化写法

    <select  resultType="">
        SELECT id, username, password, phone, email, status, created, updated
        FROM
        user
        where
        id
        in
        (
        <foreach collection="array" item="ids" separator=",">
            #{ids}
        </foreach>
        )
    </select>

2.根据多个条件进行查询

实现类层

    @Override
    public List<User> selectUserByList() {
        List<User> users = new ArrayList<>();
        User user = new User();
        ("admin").setStatus(true);
        User user1 = new User();
        ("admin666").setStatus(true);
        (user);
        (user1);
        return (users);
    }

mapper接口

    /**
     * 批量查询
     * @param users 用户信息
     * @return 用户信息列表
     */
    List<User> selectByUserList(List<User> users);

xml文件

    <select  resultType="">
        SELECT id, username, password, phone, email, status, created, updated
        FROM
        user
        where
        <foreach  collection="list" item="users" open="(" close=")" separator=" or ">
            (
            username = #{}
            and
            status = #{}
            )
        </foreach>
    </select>

3.批量新增

实现类层 

    @Override
    public List<User> insertByUserList() {
        List<User> users = new ArrayList<>();
        User user = new User();                                      
        (7).setUsername("admin852").setStatus(true).setPassword("conversation")
        .setPhone("10010").setEmail("1600973491@").
        setCreated(new Date()).setUpdated(new Date());
        User user1 = new User();      
        (6).setUsername("admin5476").setStatus(true).
        setPassword("admin5476").setPhone("10010").setEmail("1205498999@")
        .setCreated(new Date()).setUpdated(new Date());
        (user);
        (user1);
        //以下代码为查看插入后结果
        int i = (users);
        Integer[] ids = {6,7};
        return (ids);
    }

mapper接口

/**
     * 批量新增
     * @param users 用户信息
     * @return 用户信息列表
     */
    int insertByUserList(List<User> users);

xml文件

    <insert >
        INSERT INTO
        user
        (id,password,username,phone,email,status,created,updated)
        VALUES
        <foreach collection="list" item="users" index="index" separator=",">
            (
            #{},
            #{},
            #{},
            #{},
            #{},
            #{},
            #{},
            #{}
            )
        </foreach>
    </insert>

4.根据多个条件进行批量修改

实现类层

@Override
    public List<User> updateByUserList() {
        List<User> users = new ArrayList<>();
        User user = new User();
        (7).setUsername("admin852").setStatus(false).setPassword("conv")
        .setPhone("112").setEmail("1600973491@").setCreated(new Date())
        .setUpdated(new Date());
        User user1 = new User();
        (6).setUsername("admin5476").setStatus(false).setPassword("ad76")
        .setPhone("156").setEmail("1205498999@").setCreated(new Date())
        .setUpdated(new Date());
        (user);
        (user1);
        //以下代码为查看修改后结果
        int i = (users);
        Integer[] ids = {6,7};
        return (ids);
    }

mapper接口

    /**
     * 批量修改
     * @param users 用户信息
     * @return 用户信息列表
     */
    int updateByUserList(List<User> users);

xml文件

    <update >
        <foreach collection="list" item="users" index="index" separator=";">
            UPDATE user
            set
            id=#{},
            password=#{},
            username=#{},
            phone=#{},
            email=#{},
            status=#{},
            created=#{},
            updated=#{}
            where
            id=#{}
            and
            username=#{}
        </foreach>
    </update>

如需要根据id进行修改 则参考根据id批量查询 二者如出一辙