개발/10줄 TIL

210905 10줄 TIL

냐냐_ 2021. 9. 6. 13:39

[ 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