1. 적용 이유 : 화면 내 다수 일괄 Update 처리 로직 적용
2. 적용 방법
application.properties 파일 내 JDBC 연결 URL 부분에 allowMultiQueries=true 추가
예시 : jdbc:mysql://localhost:3306/test?allowMultiQueries=true
설명 : allowMultiQueries 옵션을 true로 설정하게 되면 Mapper에서 아래와 같이 DML 자체를 forEach로 수행 할 수 있다.
<foreach collection="list" item="student" separator=";">
INSERT INTO TB_USER (name, id, password)
VALUES (#{student.name}, #{student.id}, #{student.password})
</foreach>
결과 ↓
INSERT INTO TB_USER(name, id, password) VALUES ('abc', 'abc', '1234');INSERT INTO TB_USER(name, id, password) VALUES ('abc', 'abc', '1234');INSERT INTO TB_USER(name, id, password) VALUES ('abc', 'abc', '1234');INSERT INTO TB_USER(name, id, password) VALUES ('abc', 'abc', '1234');INSERT INTO TB_USER(name, id, password) VALUES ('abc', 'abc', '1234');INSERT INTO TB_USER(name, id, password) VALUES ('abc', 'abc', '1234');INSERT INTO TB_USER(name, id, password) VALUES ('abc', 'abc', '1234');
DAO를 직접 반복해서 호출 하는 방법보다 더 나은 방법이라고 생각한다.
하지만 나는 실무에서 이 방법을 채택하지 않았고 그 이유를 서술해보겠다.
- 디버깅을 위해 로그 추적에 있어 쿼리가 한번에 남게 되는 것이 마음에 들지 않음.
- 쿼리를 한번에 모아서 커밋하기 때문에 트랜잭션 처리가 까다로움.
근데 난 일단 운영에 위 방식으로 적용함.
추후 장 단점을 비교해볼 예정.
728x90