mybatis batch 예제

일괄 처리가 연결된 레코드 나 다른 데이터베이스와 같은 복잡한 데이터를 작성해야 하는 경우 삽입 문이 한 테이블에만 삽입된다는 사실을 해결할 수 있습니다. 일괄 처리가 이루어지도록 하려면 작성자가 작성할 항목을 준비해야 합니다. 그러나 처리된 데이터에 대한 제약 조건, 기회 또는 통찰력에 따라 다음 기술을 사용하는 것이 흥미로웠습니다. 다음 트릭은 간단한 연결이 있는 항목이나 관련없는 테이블에서 작업할 수 있습니다. 다음은 다중 행 및 배치 삽입을 비교하는 데 사용한 프로젝트입니다. 성능은 다양한 요인에 따라 달라지며 아래 결과는 상황에 적용되지 않을 수 있습니다. 배치 삽입이 더 잘 조정된 것처럼 보이지만 다중 행은 너무 나쁘게 보이지 않습니다. 메모리 사용량은 어떻습니까? 단일 큰 문을 보낼 때 일반적으로 알고 있어야 하는 데이터베이스 특정 제한 사항이 있습니다. 예를 들어… 참고: 이것은 MyBatis 일괄 처리 SqlSessions에 대 한 스프링 일괄 처리에 대 한. 일괄 처리 세션에 대한 자세한 내용은 SqlSession 사용 섹션으로 이동합니다. @jeffgbutler 나는 배치와 `하나의 거대한 삽입 문`의 차이점은 무엇입니까 물어 볼 수 있습니까? 데이터베이스 호출 후 일종의 db 메커니즘(예: 시퀀스가 있는 트리거)을 통해 생성된 모든 키를 수신할 수 있는 생성된 키 메커니즘이 좋은 기능입니다. 경우에 따라 일괄 처리와 함께 이 기능을 사용할 수 있습니다.

안타깝게도 Oracle 데이터베이스로 작업하는 경우 이 RDBMS의 JDBC 드라이버가 예외를 throw하므로 불가능합니다. 이 문제를 해결하려면 삽입 문을 발행할 때마다 flush 메서드를 호출해야 합니다. 즉, Oracle DB에 있는 경우 생성된 키와 함께 일괄 처리를 사용하려는 경우 일괄 처리 방식의 이점을 얻지 못합니다. 이 예제에서는 SelectProvider 지정을 사용하는 솔로 매개 변수를 보여 주며, 요약하면 처음 네 가지 메서드는 대부분 동일하지만 재정의를 통해 선택적으로 환경 및/또는 속성을 지정할 수 있습니다. 다음은 mybatis-config.xml 파일에서 SqlSessionFactory를 빌드하는 예입니다. 이 섹션의 나머지 예제에서는 이 디렉터리 구조를 따르고 있다고 가정합니다. 최종 빌드 메서드는 구성 인스턴스를 사용 합니다. 구성 클래스에는 SqlSessionFactory 인스턴스에 대해 알아야 할 모든 것이 포함되어 있습니다. Configuration 클래스는 SQL 맵을 찾고 조작하는 등 구성을 면관하는 데 유용합니다(응용 프로그램이 요청을 수락한 후에는 권장되지 않음). 구성 클래스에는 Java API로만 노출된 모든 구성 스위치가 있습니다. 다음은 구성 인스턴스를 수동으로 빌드() 메서드에 전달하여 SqlSessionFactory를 만드는 방법에 대한 간단한 예제입니다.

이 예제에서는 @SelectKey 지정을 사용하여 삽입 하기 전에 시퀀스에서 값을 검색 합니다: MyBatis에서 일괄 처리 업데이트를 수행 하려면 SqlSession을 검색할 때 실행기Type.BATCH를 지정 해야 합니다. 그런 다음 스프링 구성에는 각 레코드 종류에 맞게 특별히 구성된 대리자 작성기를 사용하는 CompositeItemWriter가 있습니다. 상호 메타 데이터는 예제에서 연결이므로 상호 작용이 업데이트된 키를 가질 수 있도록 먼저 작성해야 합니다. 당신이 볼 수 있듯이, 매퍼에 여분의 플러시 메서드를 추가 했습니다., 그래서 일괄 처리 는 데이터베이스에 전송 될 때 제어할 수 있습니다-일괄 처리 크기를 제어 하려는 경우에 유용 (이 기능은 MyBatis 이후 작동 3.3.0). 플러시 메서드의 결과는 일괄 처리의 영향을 받는 행 수입니다.

    Outros serviços