[본 포스팅은 실전! Querydsl 편을 기반으로 작성하였습니다.]
강의를 보고 따라 해보니 다음과 같은 오류가 났다.
Unable to load class 'com.mysema.codegen.model.Type'.
This is an unexpected error. Please file a bug containing the idea.log file.
그 이유는 gradle의 버전이 올라가면서 맞지 않았던 모양이다.
따라서 아래와 같이 수정해주면 된다.
gradle
buildscript {
ext {
queryDslVersion = "5.0.0"
}
}
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.7'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
//querydsl 추가
id "com.ewerk.gradle.plugins.querydsl" version '1.0.10'
}
group = 'study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
// querydsl 추가
implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
implementation "com.querydsl:querydsl-apt:${queryDslVersion}"
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
//querydsl 추가 시작
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets {
main.java.srcDir querydslDir
}
configurations {
querydsl.extendsFrom compileClasspath
}
compileQuerydsl {
options.annotationProcessorPath = configurations.querydsl
}
//querydsl 추가 끝
추가된 부분은
- buildscript
- plugins - //querydsl 추가
- dependencies - query-jpa, apt
- querydsl 추가 시작 - 끝
그 후 빌드를 눌러주면
프로젝트 폴더 - build - generated - querydsl에 프로젝트와 동일하게 엔티티 파일들이 찰 것이다.
그리고 저장된 위치는 깃에 안 올라가기 때문에 따로 이그노어 처리 안 해줘도 됨!
(querydsl 추가 경로를 그렇게 설정해줬기 때문이다.)
추가로 엔티티가 변경되었다면 Gradle에서 아래와 같이 실행
조회해 보기
@SpringBootTest
@Transactional
public class QuerydslBasicTest {
@Autowired
EntityManager em;
JPAQueryFactory queryFactory;
@BeforeEach
public void before() {
queryFactory = new JPAQueryFactory(em);
Team teamA = new Team("teamA");
Team teamB = new Team("teamB");
em.persist(teamA);
em.persist(teamB);
Member member1 = new Member("member1", 10, teamA);
Member member2 = new Member("member2", 20, teamA);
Member member3 = new Member("member3", 30, teamB);
Member member4 = new Member("member4", 40, teamB);
em.persist(member1);
em.persist(member2);
em.persist(member3);
em.persist(member4);
}
@Test
public void startQuerydsl() {
Member findMember = queryFactory
.selectFrom(QMember.member)
.from(QMember.member)
.where(QMember.member.username.eq("member1"))
.fetchOne();
assertThat(findMember.getUsername()).isEqualTo("member1");
}
}
JPAQueryFactory를 사용하여 조회할 수 있다.
QMember는 static 처리해주고 더 줄이면 좋다.
검색 조건
member.username.eq("member1") // username = 'member1'
member.username.ne("member1") //username != 'member1'
member.username.eq("member1").not() // username != 'member1'
member.username.isNotNull() //이름이 is not null
member.age.in(10, 20) // age in (10,20)
member.age.notIn(10, 20) // age not in (10, 20)
member.age.between(10,30) //between 10, 30
member.age.goe(30) // age >= 30
member.age.gt(30) // age > 30
member.age.loe(30) // age <= 30
member.age.lt(30) // age < 30
member.username.like("member%") //like 검색
member.username.contains("member") // like ‘%member%’ 검색
member.username.startsWith("member") //like ‘member%’ 검색
'JAVA > Querydsl' 카테고리의 다른 글
[Querydsl] 동적 쿼리 - Where 다중 파라미터 사용 (0) | 2023.01.06 |
---|---|
[Querydsl] 프로젝션 결과 반환 (Projections, @QueryProjection -> DTO) (0) | 2023.01.06 |