V-RIS 개발일지 (11) 음식점 이름으로 검색 조회 구현

KHJ·2022년 5월 25일
0

V-RIS 개발일지

목록 보기
11/15

음식점을 검색할 수 있는 방법으로

  1. 필터를 사용하여 검색 (지역, 비건단계, 음식점 종류 등)

  2. 음식점 이름으로 검색

두가지를 선택했다.

구현이 더 간단해보이는 이름으로 검색 기능을 먼저 구현했다.


구현방법

MySQL에 있는 LIKE를 이용하여 구현


Restaurant.java

@Data
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity(name="restaurant")
public class Restaurant {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer resIdx;
    private String resName;
    private String resAddress;
    private String resNum;
    private String resCategory;
    private String resMenu;
    private Integer userIdx;
}



RestaurantJpaController.java

@RestController
@RequiredArgsConstructor
@RequestMapping("/v1/vegan-res")
public class RestaurantJpaController {
    @Autowired
    private RestaurantRepository restaurantRepository;
    
    // 음식점 이름으로 검색
    @GetMapping("/restaurantName/{resName}")
    public List<Restaurant> searchByResName(@PathVariable String resName){

        List<Restaurant> resList=restaurantRepository.findByResNameContains(resName);
        if(resList.isEmpty()){
            throw new ResNotFoundException(String.format("[%s] not found", resName));
        }
        return resList;
    }
 }

resList에 검색 결과를 저장하고, resList가 비어있다면 찾지 못했다는 예외를 발생하도록 했다.


RestaurantRepository.java

@Repository
public interface RestaurantRepository extends JpaRepository<Restaurant, Integer> {

    // 음식점 이름으로 검색
    @Query("SELECT r FROM restaurant r WHERE r.resName LIKE %:resName%")
    List<Restaurant> findByResNameContains(@Param("resName") String resName);
}

@Query를 이용해 직접 쿼리문을 작성했다.

주의할 점은 restaurant r 처럼 별칭을 필수로 사용해야 한다.


실행결과



사진과 같이 음식점 이름에 '두부'가 들어간 음식점들을 조회한 것을 확인할 수 있다.

2개의 댓글

comment-user-thumbnail
2022년 5월 26일

멋져요... 프론트가 분발할게요. ^^

답글 달기
comment-user-thumbnail
2023년 10월 16일

소통해요~

답글 달기