-
intellij + spring boot 2.0 + maven + jpa + querydsl 적용하기JAVA/Spring 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. 확인
성공
-끝-
'JAVA > Spring' 카테고리의 다른 글
Spring + boot + thymeleaf 네임스페이스 모음 (0) 2018.05.07 jpa querydsl 표현식 (0) 2018.04.19 [ 펌 ] JPA page 인터페이스 (0) 2018.04.18 spring boot .properties로 정적 리소스 경로 안잡힐때 (1) 2018.02.27 JAVA/SPRING JPA Join 컬럼 저장 (0) 2018.02.26