728x90
반응형
source 는 Github 에 있습니다.
목차는 Querydsl 목차 에 있습니다.
[Querydsl 1편] querydsl 상속, 구현 없이 환경 세팅
spring boot, querydsl 상속, 구현 없이 환경 세팅
- 기존에 querydsl 을 구현해줄려면 interface 를 만들어야하고 구현체를 만들어야 했습니다.
- querydsl 을 사용할 때 상속, 구현없이 환경 세팅하는 법에 대해서 정리했습니다.
public interface MemberRepositoryCustom {
void test();
}
public class MemberRepositoryImpl implements MemberRepositoryCustom {
xxx
xxx
xxx
}
source
- 아래와 같이 소스를 작성한다면 generated 폴더에 Qxxxxx 파일이 만들어집니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// build.gradle | |
buildscript { | |
ext { | |
springBootVersion = '2.4.5' | |
querydslPluginVersion = '1.0.10' // 플러그인 버전 | |
} | |
repositories { | |
maven { url "https://plugins.gradle.org/m2/" } // 플러그인 저장소 | |
} | |
dependencies { | |
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") | |
classpath("gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:${querydslPluginVersion}") | |
} | |
} | |
plugins { | |
id 'java' | |
id 'org.springframework.boot' version '2.4.5' | |
id 'io.spring.dependency-management' version '1.0.11.RELEASE' | |
} | |
group 'org.example' | |
version '1.0-SNAPSHOT' | |
repositories { | |
mavenCentral() | |
} | |
dependencies { | |
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa' | |
// Querydsl start | |
implementation 'com.querydsl:querydsl-jpa' | |
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" | |
annotationProcessor "jakarta.persistence:jakarta.persistence-api" | |
annotationProcessor "jakarta.annotation:jakarta.annotation-api" | |
// Querydsl end | |
} | |
def generated = "src/main/generated" | |
sourceSets { | |
main.java.srcDirs += [ generated ] | |
} | |
tasks.withType(JavaCompile) { | |
options.annotationProcessorGeneratedSourcesDirectory = file(generated) | |
} | |
clean.doLast { | |
file(generated).deleteDir() | |
} | |
//-------------------------------------------------------------------------------- | |
// Configuration | |
@Configuration | |
public class QuerydslConfig { | |
@PersistenceContext | |
private EntityManager entityManager; | |
@Bean | |
public JPAQueryFactory jpaQueryFactory() { | |
return new JPAQueryFactory(entityManager); | |
} | |
} | |
//-------------------------------------------------------------------------------- | |
// Domain, Repository | |
@Entity | |
@NoArgsConstructor(access = AccessLevel.PROTECTED) | |
@Getter | |
public class Member { | |
@Id | |
@Column(name = "member_id") | |
@GeneratedValue(strategy = GenerationType.AUTO) | |
private Long id; | |
@Column | |
private String name; | |
@Builder | |
public Member(String name) { | |
this.name = name; | |
} | |
} | |
@Repository | |
@RequiredArgsConstructor | |
public class MemberQueryRepository { | |
private final JPAQueryFactory jpaQueryFactory; | |
public List<Member> findByName(String name) { | |
return jpaQueryFactory | |
.selectFrom(member) | |
.where(member.name.eq(name)) | |
.fetch(); | |
} | |
} | |
//-------------------------------------------------------------------------------- | |
// Test | |
@RunWith(SpringRunner.class) | |
@SpringBootTest | |
public class MemberQueryRepositoryTest { | |
@Autowired | |
private MemberRepository memberRepository; | |
@Autowired | |
private MemberQueryRepository memberQueryRepository; | |
@Before | |
public void setUp() { | |
Member member = Member.builder() | |
.name("test") | |
.build(); | |
memberRepository.save(member); | |
} | |
@Test | |
public void member_querydsl_테스트 () throws Exception { | |
List<Member> list = memberQueryRepository.findByName("test"); | |
Assert.assertEquals(1, list.size()); | |
} | |
} |
결론
- qerydsl 사용할 때, interface, 구현체를 만들지 않고 사용하기에 클래스 수를 줄일 수 있습니다.
reference
'Jpa > querydsl' 카테고리의 다른 글
[Querydsl 4편] querydsl 동적 쿼리 정리 (0) | 2022.08.10 |
---|---|
[Querydsl 3편] querydsl from 에 서브 쿼리 넣는 방법 (0) | 2022.04.25 |
[Querydsl 2편] querydsl 성능 관련 정리 (0) | 2021.12.14 |
spring-batch QuerydslPagingItemReader 설명 (0) | 2021.04.14 |
Jpa querydsl selectFrom 간단한 예제 (0) | 2020.12.05 |
댓글