본문 바로가기

개발/04.Mybatis

[Mybatis] allowMultiQueries

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를 직접 반복해서 호출 하는 방법보다 더 나은 방법이라고 생각한다.
하지만 나는 실무에서 이 방법을 채택하지 않았고 그 이유를 서술해보겠다.

  1. 디버깅을 위해 로그 추적에 있어 쿼리가 한번에 남게 되는 것이 마음에 들지 않음.
  2. 쿼리를 한번에 모아서 커밋하기 때문에 트랜잭션 처리가 까다로움.

근데 난 일단 운영에 위 방식으로 적용함.

추후 장 단점을 비교해볼 예정.

728x90