지금 미니 프로젝트가 끝나고 6월 중순에 접어들고 있다. 파이널 프로젝트를 하는 과정인데, 확실히 마음이 싱숭생숭하다.
확실하게 이전 미니 프로젝트보다는 기본적인 CRUD는 스스로 해결할 수 있다. 하지만 요번에 우리 팀원들은 QueryDSL을 도입을 하기로 해서, 코드를 모두 같이 맞추기로 했다.
따라서 내가 맡은 API 8개 중에서 4개는 끝냈고 나머지 기능들은 아직 구현만 하고 나오는 형태가 구현이 되지 않는다.
현 시점으로 지훈님도 취업이 되어서 5일뒤 부터 교육 시작이라 빠진시점에 프로젝트가 완수가 될수 있을까 하는 걱정이 있기는 하다.
다시 돌아와서 QueryDSL을 사용하기 앞서 공부한 내용을 정리를 해볼려고한다.
QEntityA entityA = QEntityA.entityA;
jpaQueryFactory
.select(entityA)
//.select(entityA.name, entityA.description, entityA.creator)
.from(entityA)
.where(entityA.id.eq("test id"))
//.where(entityA.id.eq("test id"), entityA.description.contains("test description"))
//.where(entityA.id.eq("test id").or(entityA.description.contains("test description")))
.fetchOne();
//.fetch();
아직 join에 대한 이해가 부족한 것 같기도 해서, join에 관한 내용을 찾아보았다.
이렇게 QueryDSL로 받은 것을 entity가 아닌 객체에 바로 mapping하는 방법이 있었다.
EntityANameAndDescriptionDto queryResult = jpaQueryFactory
.select(Projections.constructor(EntityANameAndDescriptionDto.class, entityA.name, entityA.description)
.from(entityA)
.where(entityA.id.eq("test ID"))
.fetchOne();
Entity A의 이름과 설명만을 저장하는 클래스가 존재한다고 가정할 때, 해당 클래스에 쿼리 결과를 저장하여 반환할 수 있습니다.
select 함수 내에 Projections 결과를 파라메터로 전달하며, Projection 방법은 다음과 같은 방법을 제공하고 있습니다.
· Projections.constructor
· Projections.beans
· Projections.fields
그래도 아직 DTO 부분에 Mapping하는 부분에서 계속해서 에러가 나지만 오늘 해결이 가능할 것 같다.
이곳에서 있으면서 여러 사람들을 만난 것 같다.
프론트 분들도 포함해서 백엔드 등등 5월 중순까지만 해도 zoom으로만 봤던 사람들을 현재는 프로젝트 때문에 강의장에서 뵈면서 많이 친해지고, 좋은 사람들을 알아간 것 같아서 막상 기간이 얼마 남지않아 아쉬움이 생긴다.
물론 다들 개발자로 일을 하면, 분명 3년이든 5년이든 어디선가는 만나서 일을 하거나 커피챗 타임을 가질 거라고 생각한다.
얼마 남지않은 기간동안 다 끝나고 후회없이 했다라고 생각이 들도록 하자.