[SpringBoot] JPAλ₯Ό ν΅ν΄ μν°ν° λ°νμ DtoVo μ¬μ©νκΈ°
π μν©
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λ‘ λ§€ν
}