Spring

SpringData JPA 다이이나믹하게 사용하기 (DynamicInsert, DynamicUpdate)

sehunbang 2024. 3. 6. 17:53

@DynamicInsert

이 어노테이션을 엔티티에 적용하게 되면 Insert 쿼리를 날릴 때 null 인 값은 제외하고 쿼리문이 만들어진다.

 

장점 더 적은 작업량 + 빠른 속도

필드차이가 1개밖에 안되서 조금 정도밖에 차이가 안나지만 필드가 많아질수록 더 차이가 많이납니다!

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)

// jpa
@Entity
@Table(name = "users")
@DynamicInsert
public class User {
  
  ....
}

 

 

 

테스트

@Test
void dynamicInsertTest() {
  // given
  var newUser = User.builder().username("user").build();

  // when
  userRepository.save(newUser);

  // then
  // 부분 생성 쿼리
}

 

 

password 는 삽입을 안함.

 

 

@DynamicUpdate

이 어노테이션을 엔티티에 적용하게 되면 Update 쿼리를 날릴 때 null인 값은 제외하고 쿼리문이 만들어진다.

적용 방법

@DynamicUpdate
public class User {

 

테스

@Test
void dynamicUpdateTest() {
  // given
  var newUser = User.builder().username("user").password("password").build();
  userRepository.save(newUser);

  // when
  newUser.updatePassword("new password");
  userRepository.save(newUser);

  // then
  // 부분 수정 쿼리
}

 

 

적용전

 

적용후