Page History
Info |
---|
SPRING-JPA에서 QueryDSL을 사용하기위해 몇가지 준비작업이 있으며SPRING BOOT STARTER 1.5 버젼을 기준으로 작동되는 방식으로 정리하였습니다.데이터 검색을 위한 질의(Query)방식은 여러가지가 있으며 총 5가지 방식으로 요약이 됩니다.
함수쿼리/JPQL은 앞장에서 다루었으며 QueryDSL과 Criteria Query 두가지 방식 사용법을 알아보겠습니다. Code Link : http://git.webnori.com/projects/WEBF/repos/spring_jpa/browse/src/test/java/com/example/demo/jpa/JpaDSL.java |
QueryDSL
...
SPRING-JPA 에서 QueryDSL사용을 위한 단계
- Entity QDomain 메타 지원을 위한 pom.xml 수정
- 기존 Repository 인터페이스에서, QueryDslPredicateExecutor 추가 상속받음
- Builder 클래스를 통해 각종 검색옵션 조합하여 , 기존 쿼리메스드(findall()) 에 인자값으로 전달가능
Spring-Boot-Starter 에서 QueryDSL 사용을 위한 pom.xml 수정
Expand | ||
---|---|---|
| ||
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> ..................... <dependencies> ..................... <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-core</artifactId> <version>4.1.3</version> </dependency> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-jpa</artifactId> <version>4.1.3</version> </dependency> ..................... </dependencies> ..................... <build> <plugins> <!-- MUST add to use generate QueryDSL --> <plugin> <groupId>com.mysema.maven</groupId> <artifactId>apt-maven-plugin</artifactId> <version>1.1.3</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>process</goal> </goals> <configuration> <!-- Specifies the directory in which the query types are generated --> <outputDirectory>target/generated-sources/querydsl</outputDirectory> <!-- States that the APT code generator should look for JPA annotations --> <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-apt</artifactId> <version>4.1.3</version> </dependency> </dependencies> </plugin> </plugins> </build> ..................... |
...
Maven-Update Project를 수행합니다.
QueryDSL지원을 위한 Repository 정의
JPA에서 사용하던 Repository에서 QueryDslPredicateExecutor 만 추가로 상속받으면 사용준비가 끝납니다.
...
Code Block | ||||
---|---|---|---|---|
| ||||
package com.example.demo.data; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.querydsl.QueryDslPredicateExecutor; public interface AddressRepoDSL extends JpaRepository<Address, Long>, QueryDslPredicateExecutor<Address>{ } |
QueryDSL을 활용하여 쿼리빌드하기
Code Block | ||||
---|---|---|---|---|
| ||||
@Autowired private AddressRepoDSL addressRepoDSL; public void jpa_queryDslTest() { QAddress userAddress = QAddress.address1; BooleanBuilder builder = new BooleanBuilder(); builder.and(userAddress.name.eq("민수1") ) .and(userAddress.address.like("%" + "서" +"%")); Iterable<Address> addressList = addressRepoDSL.findAll(builder); addressList.forEach( item -> { String itemString = String.format("%d%s %s %s %s %s",item.getId(),item.getName(), item.getPhoneNbr(), item.getSex(),item.getAddress(),item.getAge()); System.out.println(itemString); }); } |
...
No Format |
---|
if(name!=null) builder.and(userAddress.name.eq("민수1") ); if(address!=null) builder.and(userAddress.address.like("%" + "서" +"%")); |
CriteriaQuery
...