[ mybatis에서 list를 파라미터로 받기 ]
프로젝트를 DB 두 개에 연결하고 (DB는 이하 각각 A, B라 함)
A에서 받아 온 VO의 list를 B에 insert 또는 update 하는 미션이 있었다
예전에 한 번 해 본 것이라 어렵지는 않게 했지만 블로그에도 기록해 둔다.
* Mapper (java class)
int updateHospitalList(List<HospitalVO> myList);
* Mapper (xml)
1) parameterType : java.util.List
- 몇 군데의 블로그에서 mybatis는 list를 받을 수 없으니 map으로 바꾸라고 하는데, 일단 잘 되기에 굳이 map으로 변환하지 않았다.
2) keyProperty = "seq"
- 리턴값에 로우 수를 세기 위해 사용하였다. 없어도 쿼리는 잘 작동한다.
<insert id="updateHospitalList" parameterType="java.util.List" keyProperty="seq">
INSERT INTO
tb_medi_hosp_info
(
HOSP_SEQ,
HOSP_NM,
REPR_NM
)
VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.hospSeq},
#{item.hospNm},
#{item.reprNm}
)
</foreach>
ON
DUPLICATE KEY
UPDATE
HOSP_NM = VALUES(HOSP_NM),
REPR_NM = VALUES(REPR_NM)
</insert>
3) foreach collection : list
- 혹시나 해서 이름을 다르게 바꿨는데 작동하지 않음, list 라고 제대로 적어주어야 하는 듯 (에러 메시지 : BindingException: Parameter 'mylist' not found. Available parameters are [collection, list])
- item으로 지정해 준 이름에서 변수를 읽어올 수 있다
4) ON DUPLICATE KEY UPDATE ~
- 오라클의 merge into문과 같은 것으로, 데이터가 없으면 insert하고 이미 있으면 update만 해 주는 쿼리. 이 부분은 list를 파라미터로 받는 것과는 별개의 기능이다.
'개발 > 10줄 TIL' 카테고리의 다른 글
210901 10줄 TIL (0) | 2021.09.02 |
---|---|
210831 10줄 TIL (0) | 2021.09.01 |
210830 10줄 TIL (0) | 2021.08.31 |
210826 10줄 TIL (0) | 2021.08.27 |