ํ์์ gradle๊ณผ maven์ ํผ์ฉํด์ ์ฐ๊ณ ์์๋ค ใ ใ
1. Pom.xml (dependency ์ถ๊ฐ)
<!-- querydsl -->
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>${querydsl.version}</version>
</dependency>
2. Pom.xml (plugin ์ถ๊ฐ)
<!-- querydsl -->
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/java</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
: maven ์ค์ ํ, gradle clean > gradle compile > gradle install ์์ผ๋ก ์คํ
๊ทธ๋ผ generated ์ ์ ์ํ ์์น์ ์๋ก์ด ๋๋ ํ ๋ฆฌ์ ํจ๊ป Qclass ํ์ผ์ด ์์ฑ๋๋ค.
Qclass๋ Entity๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋๋ฉฐ
JPAAnnotationProcessor๊ฐ ์ปดํ์ผ ์์ ์ @Entity ๋ฑ์ ์ด๋ ธํ ์ด์ ์ ์ฐพ์ ๋ถ์ํด ๋ง๋ ๋ค.
(์ํฐํฐ์ ๋์ผํ ํ์ผ ๋ช ์์ Q๊ฐ ๋ถ์ด์๋ค.)
QueryDsl์ ์ฟผ๋ฆฌ ์์ฑ ์, ์ด๋ฌํ Qclass๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Query๋ฅผ ์คํํ๋ค.
2. Config ์ค์
@Configuration
public class QueryDslConfig {
@PersistenceContext
private EntityManager entityManager;
@Bean
public JPAQueryFactory jpaQueryFactory() { return new JPAQueryFactory(entityManager); }
}
: JPAQueryFactory๋ฅผ Bean์ผ๋ก ๋ฑ๋กํด ํ๋ก์ ํธ ์ ์ญ์์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
โ JPAQueryFactory ๊ฐ์ฒด๊ฐ import ๋์ง ์์์ ๊ณ ์์ ๋ง์ด ํ๋๋ฐ intellij ์บ์ ์ญ์ ํ๋๊น ๊น๋ํ๊ฒ ํด๊ฒฐ๋๋ค ;;;;
๋ด์๊ฐ ๋๋ ค์ค์ ;;; ๋์ผ ๋ฌธ์ ๋ฐ์ ์, File > invalidate Caches ๋ฅผ ๋๋ฌ ์บ์ ์ญ์ ํ๊ธฐ
3. .gitignore ์ค์ (๋๋ ํ ๋ฆฌ๊ฐ $buildDir/generated/querydsl์ธ ๊ฒฝ์ฐ ํจ์ค)
: build.gradle ํ์ผ์์ "$buildDir/generated/querydsl" ๋ก ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํด์ฃผ์์ผ๋ฉด ์๊ด์์ผ๋
(build ๋ฃจํธ๋ ์ ์ด์ .gitignore์ ์ค์ ๋์ด ์์)
๋์ ๊ฒฝ์ฐ์๋ build ๋ฃจํธ๋ก ๋ง๋ค๋ฉด Qclass๊ฐ ์ ๋๋ก import๋์ง ์์์, src ์๋์ ํด๋๋ฅผ ๋ง๋ค๋๋ก ํ๋ค.
.gitignore์ ์ถ๊ฐํ์ฌ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ๋์ง ์๋๋ก ํ๋ค.
/src/main/generated/
๊ทธ๋ผ ์ด์ ๊ธฐ๋ณธ์ ์ธ ์ ํ ์ ๋๋ฌ์ผ๋ ๊ฐ๋จํ ์์ ๋ก ํ ์คํธ๋ฅผ ํด๋ณด์ !
SELECT * FROM TEST WHERE FIELD_1 IN ('ํ ์คํธ1', 'ํ ์คํธ2');
0. Entity
@Entity
@Getter
@Setter
@Table(name = "testTable")
public class Test {
@Id
@column(name = "field_1")
private String field1;
}
1. Controller์ ํ ์คํธ์ฉ ์กฐํ API ์ถ๊ฐ
@PostMapping("/Test")
public ResponseEntity select(@RequestBody String[] arr) {
return new ResponseEntity(service.select(arr), HttpStatus.OK);
}
2. Service
public List<Test> select(String[] arr) {
List<Test> rslt = testRepo.findByField1(arr);
return rslt;
}
3. Repository
@Repository
public interface TestRepo extends JpaRepository<Test>, TestRepoCustom {
}
4. RepositoryCustom
public interface TestRepoCustom {
List<Test> findByField1(String[] arr);
}
5. RepositoryImpl
@RequiredArgsConstructor
public class TestRepoImpl implements TestRepoCustom {
private final JPAQueryFactory jpaQueryFactory;
@Override
public List<Test> findByField1(String[] arr) {
return jpaQueryFactory
.selectFrom(test)
.where(test.field1.in(arr))
.fetch();
}
}