미소의 세상

Mybatis forEach 사용 예시 본문

SQL

Mybatis forEach 사용 예시

짱미소 2022. 6. 3. 16:44

1. Mapper 파라미터가 List 일 경우


@Mapper

void insertBoardList(List<Board> boardList) throws Exception;

SQL Mapper

<insert id="insertBoard" parameterType="java.util.List">
    INSERT INTO T_BOARD
    (
        TITLE
        , CONTENTS
        , DISPLAY_YN
        , EMAIL
        , REG_ID
        , REG_DATE
    )
    VALUES
    (
    <foreach collection="list" item="item" separator=",">
        #{item.title}
        , #{item.contents}
        , #{item.displayYn}
        , #{item.email}
        , #{item.regId}
        , NOW()
    </foreach>
    )
</insert>

collection="list" item="item" 는 defualt 이다.




2. Mapper 파라미터가 Model객체 내 List를 foreach로 활용 할 경우


Board.java (참고용)

@Data
public class Board implements Serializable  {

    public Integer boardIdx;
    //...생략...
    List<BoardReply> boardReplyList;
}

@Mapper

BoardReply selectBoardReply(Board board) throws Exception;
<select id="selectBoardReply" parameterType="BoardSearch" resultType="BoardReply">
    SELECT
        BOARD_IDX
        , REPLY_IDX
        , TITLE
        , CONTENTS
    FROM
        T_BOARD_REPLY
    WHERE
        BOARD_IDX = #{boardIdx}
        AND REPLY_IDX NOT IN (
        <foreach collection="boardReplyList" item="item" separator=",">
            #{item.replyIdx}
        </foreach> )
</select>

collection Id 값과 parameterType 객체 내 필드명을 동일하게 해야함




3. Mapper 파라미터가 Map 일 경우


ServiceImpl.java (참고용)

@Override
public void insertEventGoodsMng(Map<String, Object> dbParams) {
    // dbParams={eventIdx=113, cate=24, ...}
    List<Map<String, Object>> goodsList = boardMapper.selectGoodsList(dbParams);
    dbParams.put("goodsList", goodsList);
    eventMapper.insertEventGoodsMng(dbParams);
}
<insert id="insertEventGoodsMng" parameterType="java.util.HashMap">
    <if test="goodsList.size != 0">
        INSERT INTO EVENT_GOODS_MNG
        (
            EVENT_GOODS_MNG_IDX
            , GOODS_IDX
        )
        VALUES
        <foreach collection="goodsList" item="item" separator=",">
        (
            #{eventIdx}
            , #{item.goodsIdx}
        )
        </foreach>
    </if>
</insert>

'SQL' 카테고리의 다른 글

트랜잭션 쉽게 이해하기  (0) 2022.10.24
오라클 CASE WHEN 예제  (0) 2022.06.03
Mybatis resultMap 사용하는 법  (0) 2022.06.03
프로시저의 장단점  (0) 2022.05.11
Mybatis #, $ 차이  (0) 2022.05.04
Comments