235.7. MyBatis에 대한 더 나은 제어를 위해 statementType 사용


MyBatis 엔드포인트로 라우팅할 때 실행할 SQL 문의가 DestinationRule ,UPDATE,DELETE 또는ECDHE 등인지 여부를 제어할 수 있도록 더 세밀한 제어가 필요합니다. 예를 들어 IN 본문에 대한 매개변수가 포함된 MyBatis 끝점으로 라우팅하려면 다음을 수행할 수 있습니다.

위의 코드에서는 MyBatis 문 selectAccountById 를 호출할 수 있으며 IN 본문에는 Integer 유형과 같이 검색하려는 계정 ID가 포함되어야 합니다.

SelectList 와 같은 다른 작업에도 동일한 작업을 수행할 수 있습니다.

그리고 UPDATE 와 마찬가지로 IN 본문으로 Account 오브젝트를 MyBatis로 보낼 수 있습니다.

235.7.1. InsertList StatementType 사용

Camel 2.10에서 사용 가능

MyBatis를 사용하면 for-each 일괄 처리 드라이버를 사용하여 여러 행을 삽입할 수 있습니다. 이를 사용하려면 매퍼 XML 파일에서 <foreach>를 사용해야 합니다. 예를 들면 다음과 같습니다.

그런 다음 다음과 같이 InsertList 문 유형을 사용하는 myknativeis 끝점에 Camel 메시지를 보내 여러 행을 삽입할 수 있습니다.

235.7.2. UpdateList statementType 사용

Camel 2.11에서 사용 가능

MyBatis를 사용하면 for-each 일괄 처리 드라이버를 사용하여 여러 행을 업데이트할 수 있습니다. 이를 사용하려면 매퍼 XML 파일에서 <foreach>를 사용해야 합니다. 예를 들면 다음과 같습니다.

<update id="batchUpdateAccount" parameterType="java.util.Map">
    update ACCOUNT set
    ACC_EMAIL = #{emailAddress}
    where
    ACC_ID in
    <foreach item="Account" collection="list" open="(" close=")" separator=",">
        #{Account.id}
    </foreach>
</update>

다음으로 다음과 같이 UpdateList 문 유형을 사용하는 myknativeis 끝점에 Camel 메시지를 보내 여러 행을 업데이트할 수 있습니다.

from("direct:start")
    .to("mybatis:batchUpdateAccount?statementType=UpdateList")
    .to("mock:result");

235.7.3. DeleteList statementType 사용

Camel 2.11에서 사용 가능

MyBatis를 사용하면 for-each 일괄 처리 드라이버를 사용하여 여러 행을 삭제할 수 있습니다. 이를 사용하려면 매퍼 XML 파일에서 <foreach>를 사용해야 합니다. 예를 들면 다음과 같습니다.

<delete id="batchDeleteAccountById" parameterType="java.util.List">
    delete from ACCOUNT
    where
    ACC_ID in
    <foreach item="AccountID" collection="list" open="(" close=")" separator=",">
        #{AccountID}
    </foreach>
</delete>

그런 다음 아래와 같이 DeleteList 문 유형을 사용하는 myknativeis 끝점에 Camel 메시지를 보내 여러 행을 삭제할 수 있습니다.

from("direct:start")
    .to("mybatis:batchDeleteAccount?statementType=DeleteList")
    .to("mock:result");

235.7.4. InsertList, UpdateList 및 DeleteList StatementTypes에서 알림

모든 유형(List, Map 등)의 매개변수를 myECDHEis에 전달할 수 있으며 최종 사용자는 myknativeis 동적 쿼리 기능을 사용하여 필요에 따라
를 처리해야 합니다.

235.7.5. 예약된 폴링 예

이 구성 요소는 예약된 폴링을 지원하므로 폴링 소비자로 사용할 수 있습니다. 예를 들어 1분마다 데이터베이스를 폴링합니다.

from("mybatis:selectAllAccounts?delay=60000")
  .to("activemq:queue:allAccounts");

자세한 내용은 "ScheduledPollConsumer Options"를 참조하십시오.

또는 Timer 또는 Quartz 구성 요소와 같은 예약된 폴링을 트리거하는 데 다른 메커니즘을 사용할 수 있습니다. 아래 샘플에서는 데이터베이스를 폴링하고 Timer 구성 요소를 사용하여 30초마다 데이터를 JMS 큐에 보냅니다.

from("timer://pollTheDatabase?delay=30000")
  .to("mybatis:selectAllAccounts")
  .to("activemq:queue:allAccounts");

MyBatis SQL 매핑 파일이 사용되었습니다.

  <!-- Select with no parameters using the result map for Account class. -->
  <select id="selectAllAccounts" resultMap="AccountResult">
    select * from ACCOUNT
  </select>

235.7.6. onConsume 사용

이 구성 요소는 Camel에서 데이터를 사용하고 처리한 명령 실행을 지원합니다. 이를 통해 데이터베이스에서 업데이트 게시를 수행할 수 있습니다. 모든 진술은 UPDATE 문이어야 합니다. Camel은 이름이 쉼표로 구분되어야 하는 여러 명령문 실행을 지원합니다.

아래 경로는 consumeAccount 문 데이터를 실행하는 방법을 보여줍니다. 이를 통해 데이터베이스의 행 상태를 처리할 수 있으므로 두 번 이상 사용하지 않도록 합니다.

또한 sqlmap 파일의 문:

235.7.7. 트랜잭션 참여

표준 MyBatis Config.xml 파일 외부의 데이터베이스 구성을 외부화하기 때문에 camel-myknativeis에서 트랜잭션 관리자를 설정하는 것이 약간 예기치 않을 수 있습니다.

첫 번째 부분에는 DataSource 의 설정이 필요합니다. 이는 일반적으로 풀(DBCP 또는 c3p0)이며 Spring 프록시에서 래핑해야 합니다. 이 프록시를 사용하면 DataSource 를 사용하지 않는 방식으로 Spring 트랜잭션에 참여할 수 있습니다(MyBatisECDHE Session >:<y가 바로 이 작업을 수행합니다).

<bean id="dataSource" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
    <constructor-arg>
        <bean class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="org.postgresql.Driver"/>
            <property name="jdbcUrl" value="jdbc:postgresql://localhost:5432/myDatabase"/>
            <property name="user" value="myUser"/>
            <property name="password" value="myPassword"/>
        </bean>
    </constructor-arg>
</bean>

이는 속성 자리 표시자를 사용하여 데이터베이스 구성을 외부화할 수 있도록 하는 추가 이점이 있습니다.

그런 다음 트랜잭션 관리자는 가장 외부 DataSource 를 관리하도록 구성됩니다.

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

myECDHEis-spring SessionECDHEyBean 은 동일한 DataSource 를 래핑합니다.

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <!-- standard mybatis config file -->
<property name="configLocation" value="/META-INF/SqlMapConfig.xml"/>
    <!-- externalised mappers -->
<property name="mapperLocations" value="classpath*:META-INF/mappers/**/*.xml"/>
</bean>

그런 다음 camel-myECDHEis 구성 요소는 해당 팩토리와 함께 구성됩니다.

<bean id="mybatis" class="org.apache.camel.component.mybatis.MyBatisComponent">
    <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>

마지막으로 트랜잭션 정책은 트랜잭션 관리자의 맨 위에 정의되며 일반적으로 사용할 수 있습니다.

<bean id="PROPAGATION_REQUIRED" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
    <property name="transactionManager" ref="txManager"/>
    <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
</bean>

<camelContext id="my-model-context" xmlns="http://camel.apache.org/schema/spring">
    <route id="insertModel">
        <from uri="direct:insert"/>
        <transacted ref="PROPAGATION_REQUIRED"/>
        <to uri="mybatis:myModel.insert?statementType=Insert"/>
    </route>
</camelContext>
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat, Inc.