MyBatis - 2개 이상의 Query를 mapper에 한번에 작성하고 싶은 경우
MyBatis를 적용한 Spring Legacy Project에서 개발을 진행하다보면 분명히 하나의 mapper에 대해서 2개 이상의 Query를 호출하고 싶은 경우가 있습니다. 예를 들어서 한번의 mapper 호출로 2개 이상의 table에 record를 insert 하고 싶은 경우, 우리는 mybatis의 mapper 내에서 2개 이상의 Query를 사용할 수 있다면 이러한 문제를 쉽게 해결할 수 있습니다.
우리가 가장 먼저 떠올릴 수 있는 아이디어는 다음과 같습니다.
<insert id="insertStatement" parameterType="hashmap">
INSERT INTO table1 (member1, member2, member3) VALUES (value1, value2, value3);
INSERT INTO table2 (member1, member2, member3) VALUES (value1, value2, value3);
</insert>
다음과 같이 ';'을 사용해서 각 SQL문을 구분하고 다음과 같이 작성한다면, 문제없이 잘 동작할 것이라 생각할 수 있습니다. 하지만 실행해보면 SQL Bad Syntax 오류가 발생하며 제대로 동작하지 않게 됩니다.
사실 이는 SQL문 각각에 대해서 Bad Syntax가 나타나는 것이 아닙니다. 이는 DB와 Connection 구성 시 기본적으로 한 번의 요청에 하나의 Query만이 들어가도록 설정되어 있기 때문입니다. 따라서 2개 이상의 Query를 mapper에서 전송하려고 시도하자 문제가 발생하는 것입니다. 하지만 다행이도 이는 MyBatis와 DB간의 Connection 설정 시 특정 parameter를 설정하여 넘김으로서 해결할 수 있습니다.
솔루션 (allowMultiQueries=true)
앞에서 언급했듯이 이 문제는 DB와 Connection 설정 시 특정 parameter를 설정하여 넘기는 것으로 해결할 수 있습니다. 솔루션 옆에 괄호로 명시한 것처럼 "allowMultiQueries=true"를 옵션으로 설정해서 datasource.url에 parameter로 포함시켜주면 됩니다. 이렇게 설정해준 후 프로젝트를 재빌드 하여 실행하면 위에서 우리가 의도했던 대로 프로젝트가 잘 동작하는 것을 확인할 수 있을 것입니다.
'Web Backend > Spring' 카테고리의 다른 글
SOLID, 객체지향 설계 5원칙 (0) | 2024.01.07 |
---|---|
Spring & MyBatis - DataAccessResourceFailureException (0) | 2022.08.11 |
web.xml (A field of identity constraint 'web-app-servlet-name-uniqueness' matched element 'web-app', but this element does not have a simple type.) (0) | 2022.01.12 |
STS - java.lang.ExceptionInInitializerError (0) | 2022.01.11 |
Annotation을 통한 DI를 사용한 CRUD 프로젝트 만들기 (0) | 2020.11.29 |
댓글
이 글 공유하기
다른 글
-
SOLID, 객체지향 설계 5원칙
SOLID, 객체지향 설계 5원칙
2024.01.07 -
Spring & MyBatis - DataAccessResourceFailureException
Spring & MyBatis - DataAccessResourceFailureException
2022.08.11 -
web.xml (A field of identity constraint 'web-app-servlet-name-uniqueness' matched element 'web-app', but this element does not have a simple type.)
web.xml (A field of identity constraint 'web-app-servlet-name-uniqueness' matched element 'web-app', but this element does not have a simple type.)
2022.01.12 -
STS - java.lang.ExceptionInInitializerError
STS - java.lang.ExceptionInInitializerError
2022.01.11