MyBatis Map을 이용한 foreach 구문
SQL MyBatis
문제점 😅
여러 키값을 조건 데이터로 업데이트를 해야한다. Map을 이용하여 List와 기타 파라미터를 담고, foreach 구문을 돌리려고 하는데 MyBatis에서 사용법이 기억이 나질 않아서 정리해둔다.
해결책 😏
구조는 다음과 같으니 호출 로직과 xml 구문을 확인할 것!
cmCodeServiceImpl.java
HashMap<String, Object> map = new HashMap<String, Object>();
List<String> codeGroupIdArr = new ArrayList<String>();
for(TbSysCodeGroup tbSysCodeGroup : tbSysCodeGroupList) {
codeGroupIdArr.add(tbSysCodeGroup.getCodeGroupId());
}
map.put("chgCodeGroupSe", "301");
map.put("codeGroupIdArr", codeGroupIdArr);
tbSysCodeGroupMapper.updateCodeGroupSe(map); // 공통코드 그룹(업무) 구분 일괄 수정
특별한 건 없고 다건의 키값이 필요하므로 Map에 List를 담았다.
cmCodeMapper.java
/**
* 공통코드 그룹(업무) 구분 일괄 수정
*
* @param tbSysCodeGroup
* @return
*/
public int updateCodeGroupSe(@Param("map") HashMap<String, Object> map);
DAO라고 생각하면 되겠다.
cmCodeMapper.xml
<!-- 공통코드 그룹(업무) 구분 일괄 수정 -->
<update id="updateCodeGroupSe">
<![CDATA[
UPDATE TB_SYS_CODE_GROUP
SET CODE_GROUP_SE = #{map.chgCodeGroupSe}
WHERE CODE_GROUP_ID IN
]]>
<foreach collection="map.codeGroupIdArr" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</update>
collection에서 map에 담긴 List 키값을 설정해야한다. Map에 담긴 List를 쓰려면 상기 내용과 같이 foreach를 작성해야 정상적으로 데이터가 바인딩 된다.
마무리 😎
어렵지 않은 내용인데, Map 데이터를 MyBatis에서 사용하는 경우에 항상 생각이 안난다. Map에는 다양한 데이터를 담아서 MyBatis 구문을 이용하여 사용할 수 있으니 체크하자.
참고문헌 📝
https://velog.io/@kero1004/mybatis-Map%EC%95%88%EC%97%90List%EC%88%9C%ED%9A%8C%ED%95%98%EA%B8%B0
https://arcsit.tistory.com/entry/Mybatis-Foreach-List%EB%A5%BC-HashMap%EC%9C%BC%EB%A1%9C-%EC%A0%84%EB%8B%AC%EB%B0%9B%EC%95%98%EC%9D%84-%EA%B2%BD%EC%9A%B0