배경 : 데이터베이스의 동일한 레코드의 경우 두 사람이 동시에 데이터를 수정 한 다음 데이터베이스에 동기화하면 동시성으로 인해 결과는 예측할 수 없습니다. 가장 쉬운 솔루션은 테이블의 레코드에 버전 필드를 추가하는 것입니다. 레코드를 수정할 때 버전이 일치하는지 비교해야합니다. 일치하면 업데이트되고 일치하지 않으면 직접 실패합니다. 업데이트가 성공하면 버전+1이 설정되어 소위 낙관적 잠금 장치입니다. 물론 이러한 논리는 개발자에게 투명한 것이 가장 좋으며이 플러그인은이 작업을 수행합니다.
1. 사용법 방법 : MyBatis 구성 파일에 다음 구성을 추가하면 완료됩니다.
<플러그인> <플러그인 인터셉터 = "com.chrhc.mybatis.locker.interceptor.optimisticlocker"/> </plugins>
2. 플러그인 구성 설명 :
플러그인의 기본 데이터베이스 구성의 낙관적 잠금 열에 해당하는 Java 속성은 버전입니다. 예를 들어 속성 수명을 사용자 정의 할 수 있습니다.
<플러그인> <플러그인 interceptor = "com.chrhc.mybatis.locker.othrector.optimisticLocker"> <property name = "versionColumn"value = "xxx"/> <!-데이터베이스의 열 이름-> <property name = "versionfield"value = "xxx"/> <!
3. 효과 :
이전 : 사용자 세트 이름 =?, password =? 여기서 id =?
후 : 사용자 세트 이름 =?, password =?, version = version+1 where id =? 그리고 버전 =?
4. 버전 값 설명 :
1. 준비 상태가 버전 값을 얻으면 플러그인이 자동으로 1만큼 증가합니다.
2. 낙관적 잠금의 전체 제어 프로세스는 사용자에게 투명하며, 이는 최대 절전 모드의 낙관적 잠금과 매우 유사하며 사용자는 낙관적 잠금의 가치에 대해 신경 쓰지 않아도됩니다.
5. 플러그인 원리 설명 :
플러그인은 MyBatis가 실행 한 업데이트 문을 가로 채며 원래 SQL 문에 낙관적 잠금 마크를 추가합니다. 예를 들어, 원래 SQL은 다음과 같습니다.
사용자 세트 이름 =?, 비밀번호 =? 여기서 id =?,
그런 다음 사용자는 SQL 문을 수정할 필요가 없습니다. 플러그인의 도움으로 위의 SQL 문은 다음과 같이 자동으로 다시 작성됩니다.
사용자 세트 이름 =?, password =?, version = version + 1 여기서 id =? 및 버전 =?,
양식, 사용자는 버전 전후에 값을 신경 쓰지 않아도됩니다. 모든 작업은 사용자에게 투명하며 플러그인은 이러한 기능 자체를 완성합니다.
6. 기본 컨벤션 :
1.이 플러그인에 의해 가로 채는 업데이트 명령문의 진술은 모두 준비된 상태이며,이 방법으로 SQL에만 유효합니다.
2. Mapper.xml의 <uddud> 태그는 인터페이스 맵퍼 메소드, 즉 MyBatis가 권장하는 메소드를 사용하지만 여러 인터페이스에 해당해야하지만 Mapper.xml <uddate> 태그에 해당 할 수 있습니다.
3.이 플러그인은 SQL의 결과에 아무것도하지 않으며 SQL 자체가 반환해야 할 것은 무엇입니까?
4. 플러그인은 기본적으로 모든 업데이트 문을 가로 채 웁니다. 사용자가 특정 업데이트에 대한 낙관적 잠금 제어를 원하지 않으면 해당 Mapper 인터페이스 메소드에 @versionlocker (false) 또는 @versionlocker (value = false)를 추가하여 플러그인 이이 업데이트에 아무것도하지 않도록이 플러그인이없는 것과 동일합니다.
5.이 플러그인은 현재 당분간 배치 업데이트에 대한 낙관적 잠금을 지원하지 않습니다. 그 이유는 배치 업데이트가 실제 개발에 많은 응용 프로그램 시나리오가 없기 때문에 배치 업데이트를위한 낙관적 잠금을 개발하기가 어렵 기 때문입니다.
6. 맵퍼 인터페이스의 매개 변수 유형은 통과 된 실제 유형과 일치해야합니다. JDK 버전에서는 인터페이스의 매개 변수 목록 이름을 얻는 방법이 없기 때문입니다. 따라서 플러그인은 매개 변수 유형과 매개 변수를 메소드 서명과 일치시키기 위해 매핑으로 사용합니다.
github 주소 : https://github.com/xjs1919/locker
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.