본문 바로가기

Back-End/QueryDSL

(5)
Spring Data Jpa와 QueryDSL 스프링 데이터 JPA에서 Repository를 생성하면 이럴 것이다.public interface TodoRepository extends JpaRepository{}하지만 QueryDSL도 추가하고 싶다면 사용자 정의 리포지토리를 사용하면 된다.1. 사용자 정의 인터페이스 작성public interface TodoRepositoryCustom { Optional findByIdWithUser(Long todoId); // 예제}2. 사용자 정의 인터페이스 구현public class TodoRepositoryCustomImpl implements TodoRepositoryCustom { private final JPAQueryFactory queryFactory; public TodoRe..
QueryDSL 중급 문법 1. 프로젝션과 결과 반환 - DTO 조회프로젝션이 둘 이상일 때는 DTO로 반환해주는 것이 좋다.결과를 DTO로 반환해주는 방법생성자 사용(제일 많이 쓰는 법이라 이것만 소개할 예정)List result = queryFactory .select(Projections.constructor(MemberDto.class, member.username, member.age)) .from(member) .fetch();2. 동적 쿼리 - BooleanBuilder 사용동적 쿼리를 해결하는 두 가지 방식BooleanBuilderWhere 다중 파라미터 사용2-1) BooleanBuilderBoolean..
JPQL을 QueryDSL로 바꿔보자! 주어진 JQPL@Query("SELECT t FROM Todo t " + "LEFT JOIN t.user " + "WHERE t.id = :todoId")Optional findByIdWithUser(@Param("todoId") Long todoId);JPQL 코드 상세 설명@Query("SELECT t FROM Todo t")SELECT t : Todo 엔티티의 인스턴스를 조회한다.FROM Todo t : JPA 엔티티 Todo를 기준으로 조회하며, t는 엔티티의 별칭 이다.LEFT JOIN t.userLEFT JOIN : Todo와 연관된 User 데이터를 조인한다. Todo에 연관된 User가 없더라도 Todo는 항상 반환된다.t.user : Todo 엔티티..
QueryDsl 기본 문법 1. 엔티티 설계(단반향 매핑)Member@Entity@Getter@NoArgsConstructor@AllArgsConstructor@Builderpublic class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String username; // 회원 이름 private int age; // 회원 나이 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "team_id") private Team team; // 소속 팀 // 팀 변경 로직 public vo..
QueryDsl 3.x 설정 1. build.gradle 파일에 의존성 추가dependencies { // Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api"}clean { delete file('src/main/gen..