ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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. 확인



    성공


    -끝-

    댓글

Designed by Tistory.