mybatis 소개
MyBatis는 일반 SQL 쿼리, 저장 프로 시저 및 고급 매핑을 지원하는 우수한 지속성 계층 프레임 워크입니다. MyBatis는 거의 모든 JDBC 코드의 수동 설정과 매개 변수 및 결과 세트의 검색 캡슐화를 제거합니다. MyBatis는 구성 및 원래 매핑, 맵핑 인터페이스 및 Java의 Pojos (일반 Old Java Objects)를 데이터베이스의 레코드로 사용하기 위해 간단한 XML 또는 주석을 사용할 수 있습니다.
1. Mybiats foreach 태그
Foreach는 주로 조건을 구축하는 데 사용되며 SQL 문의 컬렉션을 반복 할 수 있습니다. Foreach 요소의 속성에는 주로 항목, 인덱스, 수집, 개방형, 분리기 및 닫기가 포함됩니다. 항목은 컬렉션의 각 요소가 반복 될 때 별칭을 나타냅니다. 색인은 반복 프로세스 중에 각 반복에 도달하는 위치를 나타내는 이름을 지정합니다. Open은 문으로 시작하는 것을 나타내고, 분리기는 각 반복 사이의 분리기로 사용되는 기호를 나타내며, 닫기는 끝을 나타냅니다. Foreach를 사용할 때 가장 중요하고 오류가 발생하기 쉬운 것은 수집 속성입니다. 이 속성은 지정되어야하지만 다른 경우 속성의 값이 다릅니다. 세 가지 주요 상황이 있습니다.
전달 된 것이 단일 매개 변수이고 매개 변수 유형이 목록이면, 수집 속성 값은 목록입니다.
전달 된 것이 단일 매개 변수이고 매개 변수 유형이 배열 인 경우 컬렉션의 속성 값은 배열입니다.
여러 매개 변수가 전달되면 맵을 맵으로 캡슐화해야합니다.
특정 사용량은 다음과 같습니다.
<insert batch "parametertype ="list "> tstudent (name, age) <foreach collection ="list "item ="item "index"index "index"index "index"index "index"index "index"index "index"open = "("close = ")"separator = "uniet.name} as as, #{item.age} brom dual </foreact>2. Mybatis Executipe.batch
mybatis에 내장 된 3 가지 유형의 집행 유형이 있습니다. 기본값은 간단합니다. 이 모드에서는 각 문을 실행하기위한 새로운 전처리 명령문을 작성하고 SQL을 단일 줄로 제출합니다. 배치 모드는 전처리 된 문을 재사용하고 모든 업데이트 문을 배치로 실행합니다. 분명히 배치 모드에는 고유 한 문제가 있습니다. 예를 들어, 삽입 작업이있을 때, 거래가 제출되기 전에 자체 증가 된 ID를 얻을 방법이 없으므로 특정 상황에서 비즈니스 요구 사항을 충족하지 않습니다.
특정 사용량은 다음과 같습니다.
*방법 1 스프링+mybatis
// sqlsession get // spring@autowiredprivate sqlsessiontemplate sqlsessiontemplate에서 원래 sqlsessiontemplate를 주입합니다. // 배치와 함께 새 세션을 가져오고, 자동으로 거짓으로 제출하는 것 // 자동 제출이 TRUE로 설정되면, 대부분의 제출 수가 변경 될 수없고, 메모리가 변경 될 수 있습니다. sqlsessiontemplate.getSqlSessionFactory (). OpenSession (ExecutOple.Batch, False); // get mapperfoomapper = session.getMapper (foomapper.class); int size = 10000; try {for (int i = 0; i <size; i ++) {foo foo = new foo (); foo.setname (string.valueof (system.currenttimeMillis ())); foomapper.insert (foo); if (i % 1000 == 0 || i == size -1) {// 1000마다 수동으로 제출, 세션 후에 다시 롤백 할 수 없습니다. // 예외적 인 세션 ()} e) {// 제출 된 데이터가 롤백으로 롤백 될 수 없습니다. rollback ();} 최종적방법 2 : 방법 2.
일반 Mapper SQL 별칭과 결합하여 패키지 이름 + 클래스 이름을 갖는 것이 가장 좋습니다.
public void insertbatch (map <string, object> parammap, list <user> list) 예외를 던져 {// 배치로 새 세션을 가져오고, 자동 제출 // 자동 제출물이 true로 설정되면 제출 된 제출물이 마지막으로 제출 될 수 없으며, 이는 메모리 오버 플로우 SQLS 세션을 초래할 수 있습니다. sqlsessiontemplate.getSqlSessionFactory (). OpenSession (ExecutOple.batch, false); try (null! = list || list || list.size ()> 0) {int lsize = list.size (); for (int i = 0, n = list.size (i <n; i ++) {user user = list.get (i); user.setindate ((String) parammap.get ( "indate")); user.setdatadate ((String) parammap.get ( "datadate")); // data attribution time // session.insert ( "com.xx.mapper.usermapper.insert", user); // session.update ( "com.xx.mapper.usermapper.updateByPrimaryKeyselective", _ Entity); session.insert ( "패키지 이름 + 클래스 이름", 사용자); if ((i> 0 && i % 10000 = 0) || i == lsize ~ 1) | 1000, session.commit ()마다 커밋 후 롤백 할 수 없습니다. // 오버플로 세션을 방지하기 위해 캐시를 청소할 수 없습니다 .ClearCache ();}}}} catch (예외 E) {// 제출 된 데이터가 롤백으로 되돌릴 수 없습니다.위의 것은 편집자가 소개 한 Mybatis에서 배치 삽입의 두 가지 방법입니다 (효율적인 보험). 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!