Mybatis plus 의 자동 충전 과 낙관적 자물쇠 의 실례 상세 설명(springboot)

자동 충전
항목 에서 자주 데 이 터 를 만 날 수 있 습 니 다.매번 같은 방식 으로 채 웁 니 다.예 를 들 어 삽입 시간,업데이트 시간 등 입 니 다.Mybatis-plus 의 자동 충전 기능 은 우리 가 신속하게 실현 하 는 데 도움 을 줄 수 있다.
1.표 에 create 추가time,update_시간 필드
在这里插入图片描述
2.실체 클래스 주석 채 우기 필드

@TableField(fill= FieldFill.INSERT)
  private Date createTime;

  @TableField(fill = FieldFill.INSERT_UPDATE)
  private Date updateTime;
/**
*기본적으로 처리 하지 않 음
/
DEFAULT,
/*
*채 움 필드 삽입
/
INSERT,
/*
*채 움 필드 업데이트
/
UPDATE,
/*
*채 움 필드 삽입 및 업데이트
*/
INSERT_UPDATE
3.사용자 정의 구현 클래스MyMetaObjectHandler

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

  /**
   *
   *   Mybatis-plus  insert        
   */
  @Override
  public void insertFill(MetaObject metaObject) {
      this.setFieldValByName("createTime",new Date(),metaObject);
      this.setFieldValByName("updateTime",new Date(),metaObject);
  }

  /**
   *
   *   Mybatis-plus  update        
   */
  @Override
  public void updateFill(MetaObject metaObject) {
    this.setFieldValByName("updateTime",new Date(),metaObject);
  }
}
setFieldValByName 에는 세 개의 인자 가 있 습 니 다.첫 번 째 는 필드 이름 이 고 두 번 째 는 채 울 데이터 입 니 다.세 번 째 인 자 는 metaObject 로 쓰 면 됩 니 다.
테스트 삽입:
在这里插入图片描述
在这里插入图片描述
테스트 수정:
在这里插入图片描述
在这里插入图片描述
데 이 터 를 삽입 할 때 이 두 데 이 터 를 현재 시간 에 자동 으로 채 우 고 업데이트 할 때 업데이트 시간 만 현재 시간 으로 변경 합 니 다.
낙관적 자물쇠
프로젝트 에 동시 다발 작업 이 발생 하면 업데이트 문 제 를 잃 어 버 릴 수 있 습 니 다.즉,A 와 B 는 모두 Money 필드 가 100 이 고 A 는 Money+900 을 수정 하여 1000 으로 바 꿉 니 다.이때 B 도 수정 사항 을 제출 하고 Money+50 을 150 으로 바 꿉 니 다.A 의 수정 을 잃어버렸어 요.
이런 상황 을 해결 하 는 데 는 두 가지 방법 이 있다.비관 적 인 자물쇠 와 낙관적 인 자물쇠,비관 적 인 자 물 쇠 는 한 가지 조작 만 할 수 있 고 A 가 조작 할 때 B 는 기다 릴 수 밖 에 없다.A 가 제출 하고 B 가 완성 되 어야 조회 할 수 있다.
Mybatis-plus 자체 낙관 잠 금:version 필드 를 만 듭 니 다.A 와 B 가 동시에 작업 할 수 있 습 니 다.A 가 제출 할 때 현재 버 전 번호 와 조회 할 때의 버 전 번호 가 일치 하 는 지 확인 하고 일치 해 야 제출 할 수 있 습 니 다.그렇지 않 으 면 제출 에 실패 하고 제출 성공 하면 현재 버 전 번 호 를+1 합 니 다.
1.데이터베이스 에 version 필드 를 추가 하고 실체 클래스 에 version 속성 을 추가 합 니 다.
주해

 @Version
  private Integer version;
2.설정 클래스 를 작성 하여 낙관적 인 잠 금 플러그 인 을 도입 합 니 다.

@Configuration
@MapperScan("com.zyw.mpdemo.mapper")
public class MpConfig {
  
  @Bean
  public OptimisticLockerInterceptor optimisticLockerInterceptor() {
    return new OptimisticLockerInterceptor();
  }

}
3.테스트 작성
두 대상 으로 같은 id 를 조회 하고 서로 다른 수정 을 한 다음 순서대로 제출 합 니 다.

 @Override
  public void test(Account account) {
    Account account1 = accountMapper.selectById(1326188266440888321L);
    Account account2 = accountMapper.selectById(1326188266440888321L);
    account1.setMoney(account.getMoney());
    account2.setMoney(account.getMoney()+100);
    accountMapper.updateById(account1);
    accountMapper.updateById(account2);

  }
在这里插入图片描述
在这里插入图片描述
첫 번 째 성공,두 번 째 제출 이 실 패 했 습 니 다.두 번 째 제출 시의 버 전 번호 가 조회 한 것 과 일치 하지 않 기 때 문 입 니 다.
Mybatis plus 의 자동 충전 과 낙관 잠 금(springboot)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 Mybatis plus 자동 충전 낙관 잠 금 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기