스프링 부트 -2

김정현·2024년 7월 24일
0

Spring Boot

목록 보기
2/3

Auditing을 이용한 엔티티 공통 속성화

  1. @MappedSuperclass
@MappedSuperclass
@Getter @Setter
public class BaseEntity {
    @CreationTimestamp
    private LocalDateTime createdAt;

    @UpdateTimestamp
    private LocalDateTime modifiedAt;
}
  1. AuditorAware 인터페이스
@EnableJpaAuditing
@Configuration
public class MvcConfig implements WebMvcConfigurer {
}
  1. @EntityListeners
@MappedSuperclass
@Getter @Setter
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {
    @CreatedDate
    private LocalDateTime createdAt;

    @LastModifiedDate
    private LocalDateTime modifiedAt;
}
  1. @EnableJpaAuditing

JPQL

  • 기본 키 두개로 설정 (복합 키)

@Scheduled
1) fixedDelay
2) fixedRate
3) initialDelay
4) cron
5) @EnableScheduling

Repository 설계하기

  • DAO 클래스 대체
  1. JpaRepository 인터페이스 : 상속

  1. JpaRepository에서 지원하는 메서드
- S save(S entity) : persist(...) : 영속성 상태로 추가 
- S saveAndFlush(S entity) : persist() + flush()
- List<S> saveAll(Collection<S> ...) 
- List<S> saveAllAndFlush(....)


- void delete(T entity) : remove(...)
- count()
- Iterable findAll() 
- S findOne(..)
  S findById(기본키)
  
  ... get... 

참고)
find로 시작하는 메서드 : 영속 상태
get로 시작하는 메서드 : 비영속 상태 - 상태변화 감지 X

-flush() : 상태 변화 감지 -> DB 에 반영

쿼리 메서드

-> 메서드가 길어질 수 있음.

@Query 애노테이션

JPQL(Java Persistence Query Language)

  • 엔티티 기준의 SQL, 조회 결과 영속성 상태

Querydsl - 비표준

  • 레포지토리 정의
    :QueryDslPredicateExecutor를 함께 상속 -> 기존 Repository 메서드에 Predicate가 매개변수인 메서드가 추가된다.

  • Q클래스
    eq: =
    lt : <
    loe: <=
    gt: >
    goe: >=

  • BooleanBuilder
    -and(Predicate...)
    -or(Predicate...)
    -not(Predicate...)

관계 매핑
지연 로딩..
JPAQueryFactory
JPAQuery

셋팅

implementation 'com.querydsl:querydsl-jpa:5.1.0:jakarta'
annotationProcessor 'com.querydsl:querydsl-apt:5.1.0:jakarta'



-----------------------------------------------------------

tasks.named('test') {
    useJUnitPlatform()
}

def querydslDir = layout.buildDirectory.dir("generated/querydsl").get().asFile

sourceSets {
    main.java.srcDirs += [ querydslDir ]
}

tasks.withType(JavaCompile) {
    options.getGeneratedSourceOutputDirectory().set(file(querydslDir))
}


clean.doLast {
    file(querydslDir).deleteDir()
}

간단하고 고정된 조건에는 BooleanExpression을, 복잡하고 동적으로 변하는 조건에는 BooleanBuilder를 사용하는 것이 이득.

0개의 댓글