1) 오늘 학습한 내용
- QueryDLS
- Auditing
- @Dynamicinsert
- @DynamicUpdate
- QueryDSL
- Entity의 매핑 정보를 활용하여 쿼리에 적합하도록 쿼리 전용 클래스(Q클래스)로 재구성해주는 기술.
- JPAQueryFactory을 통한 Q클래스를 활용할 수 있는 기능들을 제공.
- JPAQueryFactory?
- 재구성한 Q클래스를 통해 문자열이 아닌 객체 또는 함수로 쿼리를 작성하고 실행하게 해주는 기술.
- JPAQueryFactory?
- JPAQueryFactory 사용을 위해서는 entityManager를 주입해서 Bean으로 등록해줘야 한다.
// config 패키지안에 추가
@Configuration
public class JPAConfiguration {
@PersistenceContext
private EntityManager entityManager;
@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(entityManager);
}
}
- Auditing
- 엔티티를 누가 언제 생성/마지막 수정 했는지 자동으로 기록해 주는 기술
- 적용방법
- 메인 에플리케이션 위에 @EnableJpaAuditing 추가.
- 날짜 시간 엔티티 따로 작성.
- 엔티티 클래스에 @EntityListeners(AuditingEntityListener.class) 추가
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
}
@Getter
@Entity(name = "user")
public class User extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
...
}
- createdAt, modifiedAt은 구현체 없이 동작하지만 createdBy, modifiedBy는 구현제가 필요하다.
- @Dynamicinsert
- entity에 적용하게 되면 Insert 쿼리를 날릴 때 null 인 값은 제외하고 쿼리문이 만들어진다.
- 적용 방법은 필요한 엔티티에 @Dynamicinsert 어노테이션만 붙이면 된다.
- 이러면 null 값은 제외하고 쿼리가 만들어지고 필드차이가 적으면 큰 차이는 없지만 필드가 많아질수록 차이가 많이 난다.
@DynamicInsert
public class User {
...
}
- @DynamicUpdate
- @Dynamicinsert 어노테이션과 똑같은데 이건 Update 쿼리를 날 때 null 값을 제외하고 쿼리문을 만든다.
- 적용 방법도 동일하다.
'TIL > Spring' 카테고리의 다른 글
TIL 2024-12-12 ( 4주차 - 데이터베이스 다루기 ) (1) | 2024.12.12 |
---|---|
TIL 2024-12-10 ( 2-3주차 - 데이터베이스 다루기 ) (0) | 2024.12.10 |
TIL 2024-11-27 (Spring 심화 - 활용) (1) | 2024.11.27 |
TIL 2024-11-26 (Spring 심화) (0) | 2024.11.26 |
TIL 2024-11-18 (Cookie/Session) (0) | 2024.11.18 |