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
// 부분 수정 쿼리
}
적용전

적용후
