-
[SpringBoot] JPA๋ฅผ ํตํด ์ํฐํฐ ๋ฐํ์ DtoVo ์ฌ์ฉํ๊ธฐBack-end/TIL 2022. 3. 16. 09:28
๐ ์ํฉ
Spring Data JPA๋ฅผ ํตํด ์ํฐํฐ ์กฐํ์ ๊ธฐ์กด์๋ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ์๋ค.
//๊ธฐ์กด ์ฝ๋ Page<PharmacyMenu> findByMenuKorNameContains(String menuKorName, Pageable pageable); Page<PharmacyMenu> findByMenuEngNameIgnoreCaseContains(String menuEngName, Pageable pageable);
์์ ์ฝ๋๊ฐ ํ๋ฆฐ ๊ฒ์ ์๋์ง๋ง, ๋ช๊ฐ์ง ๋ฌธ์ ์ ์ด ์กด์ฌํ๋ค.
1. ๊ธฐ์กด์ ๋ฐฉ์์ ์ํฐํฐ ์์ฒด๊ฐ ๋ฐํ๋๊ธฐ ๋๋ฌธ์ ๋ง์ฝ ์กฐํ์ ํน์ ํ๋ ๊ฐ๋ง ํ์ํ๋ค๋ฉด, ๋ถํ์ํ ํ๋ ๊ฐ์ด ๋ชจ๋ ๋ฐํ๋๋ ์ํฉ์ด๋ค.
2. ๋ถํ์ํ ํ๋๊ฐ ๋ง๊ฑฐ๋ ํด๋น ํ๋์ ํ์ ์ด text์ ๊ฐ์ด ์ฌ์ด์ฆ๊ฐ ํฌ๋ค๋ฉด, ์ฑ๋ฅ ์ด์๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ฆ, ๊ธฐ์กด์ ๋ฐฉ์์ SELECT * FROM ๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ด๋ค.
๐ ๊ฐ์
ํ์ํ ํ๋๋ง ์ ์ธํด๋ DtoVo ํด๋์ค๋ฅผ ๋ณ๋๋ก ๊ตฌ์ฑํ์ฌ ์ํฐํฐ ์์ฒด ์กฐํ๊ฐ ์๋ ํน์ ํ๋๋ค ์กฐํ๋ก ๊ฐ์ ์ด ๊ฐ๋ฅํ๋ค.
//DtoVo ์์ @Getter public class PharmMenuListResDtoVo { private Long id; private String menuKorName; private String menuEngName; private String menuUrlPath; private int menuOrder; @Builder public PharmMenuListResDtoVo(Long id, String menuKorName, String menuEngName, String menuUrlPath, int menuOrder) { this.id = id; this.menuKorName = menuKorName; this.menuEngName = menuEngName; this.menuUrlPath = menuUrlPath; this.menuOrder = menuOrder; } }
DtoVo ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๊ฒฝํ ์กฐํ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
//์กฐํ ์ฝ๋ ๋ณ๊ฒฝ ์์ @Query("select pm.id as id, " + "pm.menuKorName as menuKorName, " + "pm.menuEngName as menuEngName, " + "pm.menuUrlPath as menuUrlPath, " + "pm.menuOrder as menuOrder " + "from PharmacyMenu pm " + "where (pm.menuKorName like %:menuName% or pm.menuEngName like %:menuName%)") Page<PharmMenuListResDtoVo> findByMenuName(@Param("menuName") String menuName, Pageable pageable);
- JPQL๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด ์ํฐํฐ์์ ํ์ํ ํ๋๋ง ๊ฐ์ ธ์ค๋๋ก ํ๋ค.
- ์์์ @Query()๋ด์ as ๋ค์ {๋ณ์๋ช }๊ณผ DtoVo ํด๋์ค ๋ด์ ํ๋๋ช ์ ๋ง์ถฐ์ฃผ๋ฉด Spring Data JPA๊ฐ ์๋์ผ๋ก ๋งคํํด์ค๋ค. ์ดํ Service ํด๋์ค ๋ด์์ DTO๋ก ๋ณ๊ฒฝํ ๋ ์ ์ฉํ๋ค.
๐ Entity์ DTO ๊ฐ ๋ณํํ๋ ๋ฐฉ์
๋ฐฉ์1 - Mapper ์ฌ์ฉ
๋จ์ : ์๋ฌ ๋ฐ์์ ์ฐพ๊ธฐ ์ด๋ ต๋ค.
๋ฐฉ์2 - ๊ฐ๊ฐ์ ํ๋๋ฅผ ์ผ์ผ์ด ๋งคํ
๋ฐฉ์3 - Spring์ Page๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Page ์ธํฐํ์ด์ค์ map() ์ฌ์ฉ
//์ฝ๋ ์์ public Page<PharmMenuDto.PharmMenuListResDto> getPharmMenuList(PharmMenuDto.PharmMenuListReqDto pharmMenuListReqDto) { Pageable pageable = PageRequest.of(pharmMenuListReqDto.getPage(), pharmMenuListReqDto.getSize()); //์ ๋ฌํ Pageable ๊ฐ์ฒด ์์ฑ Page<PharmMenuListResDtoVo> pharmMenuListResDtoVos = pharmacyMenuRepository.findByMenuName(pharmMenuListReqDto.getMenuName(), pageable); return pharmMenuListResDtoVos.map(pml -> new PharmMenuDto.PharmMenuListResDto( pml.getId(), pml.getMenuKorName(), pml.getMenuEngName(), pml.getMenuUrlPath(), pml.getMenuOrder() )); //Page ์ธํฐํ์ด์ค์ map() ์ฌ์ฉํ์ฌ DTO๋ก ๋งคํ }
'Back-end > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ