일단 엔티티를 작성한다. package org.cvcvcx.board.entity; import lombok.*; import javax.persistence.*; @Entity @Builder @AllArgsConstructor @NoArgsConstructor @Getter @ToString(exclude = "writer") public class Board extends BaseEntity{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long bno; private String title; private String content; @ManyToOne(fetch = FetchType.LAZY) private Member wri..
implementation 'com.querydsl:querydsl-jpa:5.0.0' annotationProcessor( "javax.persistence:javax.persistence-api", "javax.annotation:javax.annotation-api", "com.querydsl:querydsl-apt:5.0.0:jpa") 위 코드를 build.gradle에 추가하고, 최상위 폴더 아래에 있는 build.generated.sources.annotationProcesser.java.main 폴더를 잘 확인해보면 엔티티를 기반으로 한 Q~~~~ 클래스들이 생성되어있을 것이다.하지만, 위치가 마음에 들지 않는 경우에는 지정할 수 있는 방법이 있다. plugins { id 'java' id ..
MemberDTOpackage study.querydsl.dto; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @Data @Builder @NoArgsConstructor public class MemberDTO { private String username; private int age; public MemberDTO(String username, int age) { this.username = username; this.age = age; } } JPQL에서 DTO로 조회하는 방법은 다음과 같다. @Test public void findDtoByJPQL(){ //아래와 같이 생성자를 사용하는 것과 같은 문법으로..
DTO의 생성자에 붙이는 어노테이션@QueryProjection 을 사용하면, DTO의 QType을 만들 수 있고, 그걸 사용해서 쿼리문을 생성할 수 있다. UserDTO@Data @NoArgsConstructor @Builder public class UserDTO { private String name; private int age; @QueryProjection public UserDTO(String name, int age) { this.name = name; this.age = age; } }이후, complieQuerydsl을 하면, DTO의 Q타입이 생성된다.@Test public void findDtoByQueryProjection() throws Exception{ //given List..
BooleanBuilder를 사용해서 해결하는법과 Where문에서 다중 파라미터를 사용하는 방법 두가지가 존재 BooleanBuilder@Test public void 동적쿼리_booleanBuilder() throws Exception{ //given String usernameParam = "member1"; Integer ageParam = 10; //when List members = searchMember1(usernameParam, ageParam); //then members.forEach(member1 -> System.out.println("member1 = " + member1)); assertThat(members.size()).isEqualTo(1); } //동적 검색 조건을 영어로..
수정되거나, 생성된 날짜를 기록하는 컬럼이 중복되는데, 엔티티마다 이것을 작성하는 것보다,BaseEntity를 작성해서, 중복되는 컬럼을 처리해보자 //BaseEntity.java @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와 @Enti..
@Entity @Getter @ToString(exclude = "memberId")//꼭, 다른 엔티티에 의존하는 컬럼을 tostring에서 제외시킬것 public class Order extends BaseEntity{ @Id @GeneratedValue @Column(name = "order_id") private Long orderId; //targetEntity로 어떤 엔티티에 의존할지 설정하고, fetch로 지연조회 설정할것 //지연조회를 설정하지 않으면, 멤버가 필요하지 않은 상황에서도 함께 조회하게 됨 //그래서 지연 조회를 설정하고 필요할 때만 즉시조회 설정하는게 성능상 이득임 @ManyToOne(targetEntity = Member.class,fetch = FetchType.LAZY)..
- Total
- Today
- Yesterday
- Config
- dto
- Java
- security
- @BaseEntity
- 배열
- JPA
- 다대일
- 작업 순서정리
- ModelAttribute
- 코딩테스트
- 데이터베이스 설계
- SSAFY
- 커맨드객체
- spring data JPA
- Python
- 취업
- 11기
- QueryDSL
- 일대다
- test
- notion
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |