Mybatis- 动态sql之foreach标签

340 阅读1分钟

以下代码背景为实现购物车商品信息刷新功能,保持购物车内部的信息最新的接口Mapper。
mybatis的foreach标签经常用于遍历集合,构建in条件语句或者批量操作语句。
Mapper定义: ItemsMapperCustom

import com.imooc.pojo.vo.SearchItemsVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;

public interface ItemsMapperCustom {
    public List<ShopcartVO> queryItemsBySpecIds(@Param("paramsList") List specId);

xml定义:ItemsMapperCustom.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.imooc.mapper.ItemsMapperCustom">
        <select id="queryItemsBySpecIds" parameterType="List" resultType="com.imooc.pojo.vo.ShopcartVO">
        SELECT
            t_items.id AS itemId,
            t_items.item_name AS itemName,
            t_items_img.url AS itemImgUrl,
            t_items_spec.id AS specId,
            t_items_spec.`name` AS specName,
            t_items_spec.price_normal AS priceNormal,
            t_items_spec.price_discount AS priceDiscount
        FROM
            items_spec t_items_spec
        LEFT JOIN
            items t_items
        ON
            t_items_spec.item_id = t_items.id
        LEFT JOIN
            items_img t_items_img
        ON
            t_items_img.item_id = t_items.id
        WHERE
            t_items_img.is_main = 1
        AND
            t_items_spec.id
        IN
            <foreach collection="paramsList" index="index" item = "specId" open="(" separator="," close=")">
                #{specId}
            </foreach>
    </select>

</mapper>

保存评论到items_comment表

    <select id="saveComments" parameterType="Map">
        INSERT INTO
        items_comments
        (id,
        user_id,
        item_id,
        item_name,
        item_spec_id,
        sepc_name,
        comment_level,
        content,
        created_time,
        updated_time
        )
        VALUES
        <foreach collection="paramsMap.commentList" item="item" index="index" separator=",">
            (
            #{item.commentId},
            #{paramsMap.userId},
            #{item.itemId},
            #{item.itemName},
            #{item.itemSpecId},
            #{item.itemSpecName},
            #{item.commentLevel},
            #{item.content},
            now(),
            now()
            )
        </foreach>

    </select>

Impl相应代码

 @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public void saveComments(String orderId, String userId, List<OrderItemsCommentBO> list) {
        // 1、保存评论, item_comments
        for (OrderItemsCommentBO oic : list) {
            oic.setCommentId(sid.nextShort());
        }
        Map<String, Object> queryMap = new HashMap<>();
        queryMap.put("userId", userId);
        queryMap.put("commentList", list);
        itemsCommentsMapperCustom.saveComments(queryMap);
    }

参考链接:www.cnblogs.com/hooly/p/909…