JAVA/Spring

intellij + spring boot 2.0 + maven + jpa + querydsl 적용하기

cocho/kuby 2018. 4. 18. 22:21

1. pom.xml 설정


<!--
잘보면 com.querydsl 패키지랑 com.mysema.querydsl 이 있는데
여기서는 com.querydsl 패키지를 사용함.
mysema 는 querydsl 레퍼런스 문서 참조
http://www.querydsl.com/static/querydsl/3.4.0/reference/ko-KR/html_single/
-->
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
</dependency>

<!-- querydsl 플러그인 디펜던시 , 역시 위에것과 같은 패키지로 다운받아야함 -->
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
</dependency>


<!-- QDomain 을 생성하기 위한 플러그인 설정 -->
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.0.9</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>
<!-- END QDomain 을 생성하기 위한 플러그인 설정 -->


2. 엔티티 생성

package com.example.demo.entity;

import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
@Data
public class UserVo {

@Id
@GeneratedValue
private Long idx;

private String name;
private String password;
private String email;
}


3. repository 생성


package com.example.demo;

import com.example.demo.entity.QUserVo;
import com.example.demo.entity.UserVo;

import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.types.Predicate;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.querydsl.QuerydslPredicateExecutor;


public interface UserRepository extends JpaRepository<UserVo, Long>, QuerydslPredicateExecutor<UserVo> {

public default Predicate makePredicate(String email, String name) {
BooleanBuilder builder = new BooleanBuilder();
QUserVo userVo = QUserVo.userVo;

/**
* user 의 idx 가 111 보다 큰 레코드 조회
*/
builder.and(userVo.idx.gt(111));
return builder;
}
}

4. 테스트 코드 작성


/**
* 더미데이터 레코드
*/
@Test
public void insertUser() {
IntStream.range(0, 300).forEach( i -> {
UserVo userVo = new UserVo();
userVo.setEmail("thtjwls_" + i + "@naver.com");
userVo.setName("이지훈 " + i );
userVo.setPassword("1234");

userRepository.save(userVo);
});
}

/**
* QueryDsl 실행
*/
@Test
public void testList1() {
this.insertUser();

/**
* 페이징 기본 설정
*/
Pageable pageable = PageRequest.of(0, 20, Sort.Direction.DESC, "idx");

/**
* 3번에서 만든 레포지토리 를 실행한다???
*/
Page<UserVo> result = userRepository.findAll(
userRepository.makePredicate(null, null), pageable
);

/**
* 출력
*/
result.getContent().forEach(userVo -> System.out.println("" + userVo));
}


5. 확인



성공


-끝-