예제로 이렇게 했습니다.
테이블은 제품(TB_GD) 라는 테이블 입니다.
CREATE TABLE `TB_GD` (
`GD_CD` int(11) NOT NULL AUTO_INCREMENT, // 제품_코드 (PK)
`GD_NM` varchar(20) DEFAULT NULL, // 제품_이름
`REG_MEMB_ID` varchar(20) DEFAULT NULL, // 등록한 사람의 ID
`REG_DT` varchar(14) DEFAULT NULL, // 등록한 날짜
`UPDT_MEMB_ID` varchar(20) DEFAULT NULL, // 수정한 사람의 ID
`UPDT_DT` varchar(14) DEFAULT NULL, // 수정한 날짜
`DEL_YN` varchar(1) DEFAULT 'N', // 삭제_여부 (N : 삭제 안된 상태, Y: 삭제 된 상태)
PRIMARY KEY (`GD_CD`)
)
테이블에 DEL_YN 을 추가 한것은 FK 때문입니다.
mybatis 를 이용하여, 동적 쿼리문을 하고 싶습니다.
여러개의 pk 가 왔을 때, pk에 해당하는 row의 DEL_YN을 Y로 수정하고 싶습니다.
저는 이렇게 파라미터를 만들었습니다.
HashMap<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("SESSION_LOGIN_ID", loginId);
paramMap.put("pkList", list);
마지막 줄에 보이는 list는 ArrayList 이며, 안에는 위 테이블의 PK 값이 들어 있습니다.
이 paramMap을 sqlSession.update() 메서드의 인자로 넣어서 처리합니다.
그리고 보시면 아시겠지만, Value Object, 즉 VO를 안씁니다.
그렇다고 했을때, 동적 쿼리문을 어떻게 작성해야 하는지 모르겠습니다.
<update id="doDelelteChecked" parameterType="HashMap">
/* id : product.doDelelteChecked*/
UPDATE
TB_GD
SET
TB_GD.DEL_YN = 'Y' /* 삭제 처리*/
, TB_GD.UPDT_MEMB_ID = #{SESSION_LOGIN_ID}
, TB_GD.UPDT_DT = DATE_FORMAT(NOW(), "%Y%m%d%H%i%S")
WHERE
TB_GD.GD_CD IN
<foreach collection="pkList" index="index" item="item" open="(" separator="," close=")">
여기에 무엇을 넣어야 되나요? 별에 별짓 다해봤는데, 안됩니다.
</foreach>
;
</update>
한 줄 요약 : mybatis 에서, VO 를 안쓰고 foreach 를 쓸 수 있는 방법이 정 없는 것인지 궁금합니다. 그렇다고 한다면, 왜 그런지..
속시원하게 해결해 주실분 구합니다. 정말 다 찾아보다가 두손두발 들었습니다. 잘 부탁드립니다.