Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Info

SPRING-JPA에서 QueryDSL을 사용하기위해 몇가지 준비작업이 있으며SPRING BOOT STARTER 1.5 버젼을 기준으로 작동되는 방식으로 정리하였습니다데이터 검색을 위한 질의(Query)방식은 여러가지가 있으며

총 5가지 방식으로 요약이 됩니다.

  • SQL(Native)
  • Query Function
  • JPQL
  • Criteria Query
  • Query DSL

함수쿼리/JPQL은 앞장에서 다루었으며

QueryDSL과 Criteria Query 두가지 방식 사용법을 알아보겠습니다.

QueryDSL

...


SPRING-JPA 에서 QueryDSL사용을 위한 단계

  • Entity QDomain 메타 지원을 위한 pom.xml 수정
  • 기존 Repository 인터페이스에서, QueryDslPredicateExecutor 추가 상속받음
  • Builder 클래스를 통해 각종 검색옵션 조합하여 , 기존 쿼리메스드(findall()) 에 인자값으로 전달가능


Spring-Boot-Starter 에서 QueryDSL 사용을 위한 pom.xml 수정

Expand
titlepom.xml
	<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
languagejava
themeEmacs
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
languagejava
themeEmacs
	@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

...