[MyBatis/MySQL] 하나의 Mapper Method에서 여러개의 Statement를 쿼리하는 방법

마이바티스 MySQL에서 한 번에 여러개의 구문 실행하기?

  제목에도 쓰여있듯, MySQL 사용자를 위한 방법입니다. 일반적으로 아래와 같이 Mapper XML에 작성하고 돌리면 구문 에러가 날 겁니다.


UPDATE md
    SET call_count =
    NULL
    #{callCount}
    WHERE biz_id = (
        SELECT id
        FROM business
        WHERE cat3 = #{id}
    );

UPDATE category_3rd
    SET call_count =
    NULL
    #{callCount}
    WHERE id = #{id};

  웃기는 건, 워크벤치나 IDE 자체 내장 SQL 툴로 돌리면 된다라는 겁니다. 하지만 그건 해당 툴들이 Multiple Queries를 지원하기 때문이죠.

  감이 잡히셨죠? Multiple Queries를 지원 가능하게 하면 됩니다.

한 번에 여러 구문 실행 가능하게 하는 방법

  다시 말씀드리지만, MySQL 전용입니다. 다른 DB들은 각각 따로 방법이 있는 듯 했습니다. Oracle의 경우엔 BEGIN .. END를 썼던가 하고, MSSQL의 경우엔 GO를 중간에 집어넣었던 것 같고... 암튼 그것들은 그냥 흘려봤기 때문에 직접 검색하시고, 여기선 MySQL 기준으로 알려드리겠습니다.

  DB Connection URLallowMultiQueries=true를 추가해주세요. 전 현재 스프링 프레임워크를 사용중이므로 Bean Configuration을 예시로 들겠습니다.

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="url" value="jdbc:mysql://dbline.co.kr:3306/dbline_new?useSSL=false&amp;allowMultiQueries=true"/>
        <property name="username" value="root"/>
        <property name="password" value="PW"/>
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="schema" value="dbline_new"/>
    </bean>
    참 쉽죠? 이제 위의 SQL이 구문 오류 없이 정상적으로 돌아가는 것을 확인하실 수 있을 겁니다.

댓글

이 블로그의 인기 게시물

C# 남아도는 메모리에도 불구하고 OutOfMemoryException이 발생한다면?

MySQL 데이터 타입과 Java 데이터 타입 비교/매칭

테일즈위버 OST 전곡 모음