Develop/곤부📙

구멍가게코딩단 '코드로 배우는 스프링부트 웹프로젝트' / 2

밀김 2023. 10. 20. 11:43
728x90

 

 

 

 

 

 

 

 

 

 

jar와war의 차이점

: jar는 독립적인 자바 어플리케이션을 패키징하는데 사용되고,war는 웹 어플리케이션을 패키징 하는데 사용됨

 

 

데이터의 등록 시간과 수정 시간 같은것들은 자동으로 변경되어야 하는거기때문에 어노테이션을 통해서 진행한다

entity폴더에 BaseEntity파일을 만든다

 

@MappedSuperclass
@EntityListeners(value = { AuditingEntityListener.class })
@Getter
abstract class BaseEntity {
    @CreatedDate
    @Column(name="regdate",updatable = false)
    private LocalDateTime regDate;
   
    @LastModifiedDate
    @Column(name="moddate")
    private LocalDateTime modDate;
}

이렇게 만들었을때 MappedSuperclass 어노테이션이 적용돼면 이 클래스는 테이블로 생성되지 않음.

실제 테이블은 BaseEntity클래스를 상속한 엔티티의 클래스로 데이터베이스 테이블이 생성된다

 

 

 

 

Querydsl을 이용하면 복잡한 검색조건이나 조인,서브 쿼리등의 기능을 구현할수 있다

 

 

 

Q로 시작되는 클래스들은 개발자가 건드리지 않아야함

 

 

 

Predicate : 자바 함수형 인터페이스중 하나로 주어진 조건을 나타내는 불리언값을 반환하는 함수를 표현하는 인터페이스

 

 

이 로직을 통해서 페이지처리를 함과 동시에 검색 처리까지 가능해짐.

@Test
public void testQuery1(){
    // 페이징 및 정렬 설정 (페이지 0, 페이지 크기 10, 'gno' 기준 내림차순 정렬)
    Pageable pageable = PageRequest.of(0, 10, Sort.by("gno").descending());

    // Querydsl을 사용하기 위한 엔터티 클래스(QGuestbook) 생성
    QGuestbook qGuestbook = QGuestbook.guestbook;

    // 검색 키워드 설정
    String keyword = "1";

    // BooleanBuilder를 사용하여 동적 쿼리 조립
    BooleanBuilder builder = new BooleanBuilder();

    // QGuestbook의 'title' 속성이 검색 키워드를 포함하는지 확인하는 조건 추가
    BooleanExpression expression = qGuestbook.title.contains(keyword);

    // 조건을 BooleanBuilder에 추가
    builder.and(expression);

    // guestbookRepository에서 조건에 맞는 데이터를 페이징하여 조회
    Page<Guestbook> result = guestbookRepository.findAll(builder, pageable);

    // 조회 결과를 출력
    result.forEach(guestbook -> {
        System.out.println(guestbook);
    });
}

 

 

 

 

 

 

 

728x90