일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 정보처리산업기사
- 공부일지
- 백준알고리즘
- 자바
- java
- 데이터베이스
- C++
- 코딩교육봉사
- 시나공
- SW봉사
- SQL
- 1과목
- programmers
- 코틀린
- 백준
- BFS
- 회고
- 소프티어
- kotlin
- 스프링
- MYSQL
- CJ UNIT
- 문제풀이
- python
- 알고리즘
- 코딩봉사
- 파이썬
- softeer
- 프로그래머스
- 백준 알고리즘
Archives
- Today
- Total
JIE0025
[리팩토링] EntityManager → QueryDSL을 이용한 getCategories 본문
개발/Spring, SpringBoot, JPA, Webflux
[리팩토링] EntityManager → QueryDSL을 이용한 getCategories
Kangjieun11 2022. 12. 22. 23:35728x90
✅ 이전 버전은..
- 앞서 entitymanager를 직접 불러와 사용하는것
- 레포지토리르 2개나 만들어 사용한것 (서비스에 2개의 의존 레포지토리가 생겼다)
https://jie0025.tistory.com/345
예전에 스터디하면서 정리해놓은 글이 있어 해당 사용방법을 참고했다.
https://jie0025.tistory.com/254
✅ QueryDSL을 이용한 리팩토링
💻 CategoryRepositoryImpl
package com.FlagHome.backend.v1.category.repository;
import com.FlagHome.backend.v1.category.entity.Category;
import com.FlagHome.backend.v1.category.entity.QCategory;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import java.util.List;
@RequiredArgsConstructor
public class CategoryRepositoryImpl implements CategoryRepositoryCustom{
private final JPAQueryFactory queryFactory;
@Override
public List<Category> findAll(){
QCategory category = QCategory.category;
List<Category> result = queryFactory
.select(category)
.from(category)
.where(category.parent.isNull())
.fetch();
return result;
}
}
💻 CategoryRepositoryCustom
package com.FlagHome.backend.v1.category.repository;
import com.FlagHome.backend.v1.category.entity.Category;
import java.util.List;
public interface CategoryRepositoryCustom {
List<Category> findAll();
}
💻 CategoryRepository
package com.FlagHome.backend.v1.category.repository;
import com.FlagHome.backend.v1.category.entity.Category;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface CategoryRepository extends JpaRepository<Category,Long>, CategoryRepositoryCustom {
}
💻 CategoryResultDto
package com.FlagHome.backend.v1.category.dto;
import com.FlagHome.backend.v1.category.entity.Category;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.stream.Collectors;
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class CategoryResultDto {
private Long id;
private String name;
private Long depth;
private List<CategoryResultDto> children;
public static CategoryResultDto of(Category category) {
return new CategoryResultDto(
category.getId(),
category.getName(),
category.getCategoryDepth(),
category.getChildren().stream().map(CategoryResultDto::of).collect(Collectors.toList())
);
}
}
💻 CategoryService
@Service
@RequiredArgsConstructor
public class CategoryService {
private CategoryRepository categoryRepository;
@Transactional
public List<CategoryResultDto> getCategories () {
List<CategoryResultDto> categories = categoryRepository
.findAll().stream().map(CategoryResultDto::of)
.collect(Collectors.toList());
return categories;
}
}
✅ 동작확인
이전과 정확하게 똑같이 동작하는것을 확인했다.
'개발 > Spring, SpringBoot, JPA, Webflux' 카테고리의 다른 글
[JPA] 4장 엔티티 매핑 (0) | 2023.01.02 |
---|---|
[개선] 엔티티에 사용되었던 무분별한 어노테이션 개선 과정 (0) | 2023.01.02 |
[Spring] 로깅 (Logging) (0) | 2022.12.22 |
[Springboot][개발] FLAG - Category CRUD 1차 완성 (Merged) (0) | 2022.12.21 |
[Springboot][개발] FLAG - Category CRUD 1차 초안 작성 (0) | 2022.12.17 |