티스토리 뷰
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;
}
'Skill > JPA' 카테고리의 다른 글
[JPA] 등록자,수정자,등록일, 수정일 넣기 (0) | 2021.02.24 |
---|---|
@JsonProperty 를 이용한 접근 제어 - 응답값에 포함하지 않기 (0) | 2021.02.22 |
[jpa] 조회된 목록이 없는 경우 빈 Page 만들기 (0) | 2021.02.17 |
[JPA] 기본완성 findBy.. 함수들과 return값 (0) | 2021.02.14 |
[JPA] DB Table 자동 수정 (0) | 2021.02.03 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 프로젝트명변경
- PostgreSQL
- $.each
- 정규식
- Javascript
- getter
- 전후방탐색
- spring
- JQuery
- lombok
- excel
- oracle
- $.extend
- devtools
- border-collapse
- ul li로 테이블
- element위치
- 진열사랑
- object key
- springboot
- @ExceptionHandler
- caniuse
- QueryDSL
- 여러 컬럼 update
- draw.io
- sumifs
- DatePicker
- Keycode
- CSS
- setter
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함