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