티스토리 뷰

Skill/JPA

[queryDsl] 설정

진열사랑 2021. 2. 21. 15:47

pom.xml

<!-- QueryDsl 설정 -->
<dependency>
  <groupId>com.querydsl</groupId>
  <artifactId>querydsl-apt</artifactId>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>com.querydsl</groupId>
  <artifactId>querydsl-jpa</artifactId>
</dependency>
<build>
    <plugins>
        <!-- querydsl start -->
        <plugin>
            <groupId>com.mysema.maven</groupId>
            <artifactId>apt-maven-plugin</artifactId>
            <version>1.1.3</version>
            <executions>
                <execution>
                    <goals>
                        <goal>process</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>target/generated-sources/java</outputDirectory>
                        <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
                        <options>
                            <querydsl.entityAccessors>true</querydsl.entityAccessors>
                        </options>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <!-- querydsl end -->
    </plugins>
</build>            

QuerydslConfig.java

@Configuration
public class QuerydslConfig {
	
	@PersistenceContext
	private EntityManager entityManager;
	
	@Bean
	public JPAQueryFactory jpaQueryFactory() {
		return new JPAQueryFactory(entityManager);
	}

}

QueryDSL를 사용할 때 QClass 인식 문제 해결

위의 설정만 하면 되느냐? 아니올시다.

반드시 build path에 생성된 qclass위치를 sources tab에 추가해 주어야 한다.

pom.xml plugin의 <outputDirectory>target/generated-sources/java</outputDirectory> 위치와 맞추어야 한다.

intellj인 경우는  link를 참조하시라.

자 이제 제대로 사용해 볼까나..

class를 만들어 querydsl로 조건문 등을 만들고 join도 할 수 있다.

@Repository
public class TWdTermQuerydslRepository extends QuerydslRepositorySupport {
	
	//private final JPAQueryFactory queryFactory;
	private QTWdTerm tWdTerm = QTWdTerm.tWdTerm;
	
	public TWdTermQuerydslRepository(JPAQueryFactory queryFactory) {
		super(TWdTerm.class);
		//this.queryFactory = queryFactory;
	}


    public Page<TWdTerm> findList(Map<String,Object> param, Pageable pageable){
		BooleanBuilder booleanBuilder = new BooleanBuilder();
		JPQLQuery<TWdTerm> query= from(tWdTerm);
		
		if(param.get("domainSn") != null && !param.get("domainSn").toString().equals("")) { // 도메인 일련번호
			Integer domainSn = Integer.parseInt(param.get("domainSn").toString());
			booleanBuilder.and( tWdTerm.domainSn.eq(domainSn) );
		}
		if(param.get("prjctSn") != null && !param.get("prjctSn").toString().equals("")) { // 프로젝트 일련번호
			Integer prjctSn = Integer.parseInt(param.get("prjctSn").toString());
			booleanBuilder.and( tWdTerm.prjctSn.eq(prjctSn) );
		}
		if(param.get("termNm") != null && !param.get("termNm").toString().equals("")) { // 용어 명
			booleanBuilder.and( tWdTerm.termNm.contains(param.get("termNm").toString()) );
		}
		if(param.get("termEnAbbr") != null && !param.get("termEnAbbr").toString().equals("")) { // 용어 영문 약어
			booleanBuilder.and( tWdTerm.termEnAbbr.contains(param.get("termEnAbbr").toString()) );
		}
		if(param.get("termEnNm") != null && !param.get("termEnNm").toString().equals("")) { // 용어 영문 명
			booleanBuilder.and( tWdTerm.termEnNm.contains(param.get("termEnNm").toString()) );
		}
		if(param.get("dataFom") != null && !param.get("dataFom").toString().equals("")) { // 데이터 형태
			booleanBuilder.and( tWdTerm.dataFom.contains(param.get("dataFom").toString()) );
		}

		query = query.where(booleanBuilder).orderBy(tWdTerm.termSn.desc());
		final List<TWdTerm> result = getQuerydsl().applyPagination(pageable, query).fetch();
		return new PageImpl<>(result, pageable, query.fetchCount());
    }
}

마지막으로 Controller에서 querydslRepository를 사용해 보자

@Autowired
TWdTermQuerydslRepository termQuerydslRepository;


@GetMapping("/terms")
public Page<TWdTerm> list( @RequestParam Map<String,Object> param,
		@RequestParam(name = "perPage", required = true, defaultValue = "20") int perPage,
		@RequestParam(name = "page", required = true, defaultValue = "1") int page) throws Exception {
	
	Page<TWdTerm> list;
	
	PageRequest pageRequest = PageRequest.of(page - 1, perPage, Sort.by(Direction.DESC, "termSn"));

	list = termQuerydslRepository.findList(param, pageRequest);
	return list;
	
}

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함