본문 바로가기
혼자서 개발새발

저장용) JPA & QueryDsl 쓰는 법

by 휴일이 2022. 12. 20.

 

 

 

1. build.gradle 라이브러리 추가

 

	// hibernate 버전 오류 조절하기
	ext["hibernate.version"] = "5.6.5.Final"

	//JPA
  	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'


	//Querydsl
	implementation 'com.querydsl:querydsl-jpa'
	annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"
	annotationProcessor "jakarta.annotation:jakarta.annotation-api"
	annotationProcessor "jakarta.persistence:jakarta.persistence-api"

	// git에서 Q클래스 지우기
    clean {
	delete file('src/main/generated')
}

 

 

 

 

2.

gradle -> Tasks -> bulid -> clean

gradle -> Tasks -> other -> compileJava

 

Q 타입 생성 확인은

build -> generated -> sources -> annotationProcessor -> java/main

 

Q 타입 import 불가할 경우

File -> Project Structure -> Modules 에서

annotationProcessor 를 Source 로 변경

 

3.

Repository 에서

EntityManager / JPAQueryFactory 선언 후

생성자로 주입

(JPAQueryFactory도 Config에서 Bean으로 주입해도 됨)

    private final EntityManager em;
    private final JPAQueryFactory query;

    public MemberRepositoryImpl(EntityManager em) {
        this.em = em;
        this.query = new JPAQueryFactory(em);
    }

 

 

4.

Config로 Bean 생성, 주입

@Configuration
@RequiredArgsConstructor
public class QuerydslConfig {

    private final EntityManager em;
    private final MemberJpaRepository memberJpaRepository;

    @Bean
    public MemberRepository memberRepository() {
        return new MemberRepositoryImpl(em, memberJpaRepository);
    }
}

 

 

5.

Application에서 import 후 사용

@Import(QuerydslConfig.class)
@SpringBootApplication
public class FanApplication {

	public static void main(String[] args) {
		SpringApplication.run(FanApplication.class, args);
	}

}

 

 

6.

BooleanBuilder 생성 후,

조건 추가

query에 집어 넣어서 사용

 

@Override
public List<Member> findByIdPwd(MemberDto memberDto) {

    BooleanBuilder builder = new BooleanBuilder();

    builder.and(member.id.like(memberDto.getMemberId())
            .and(member.password.like(memberDto.getPassword())));

    return query.select(member)
            .from(member)
            .where(builder)
            .fetch();
}

 

 

 

 

수정할 거 있으면 나중에 수정함

728x90