프로그래밍/JPA
JPA findBy로 특정 범위내 숫자 컬럼 검색하는법
승민아
2023. 12. 26. 15:25
서버에 위도 경도를 쿼리 파라미터로 요청하면
요청한 위도 경도를 통해 특정 범위내에 속하는 데이터를 응답으로 보내는 로직이 필요했다!
어떻게 할까?
먼저 location 테이블은 다음과 같이 생겼다.
CREATE TABLE location (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
latitude DOUBLE,
longitude DOUBLE,
title VARCHAR(255),
address VARCHAR(255),
description TEXT
)
위도 경도가 DOUBLE 타입이다.
LocationRepository
@Repository
public interface LocationRepository extends JpaRepository<Location, Long> {
List<Location> findByLatitudeBetweenAndLongitudeBetween(double latitudeMinValue, double latitudeMaxValue, double longitudeMinValue, double longitudeMaxValue);
}
findBy필드Between로 범위 검색을 할 수 있다.
최소값 minValue, 최대값 maxValue내에 속하는 값을 갖는 데이터를 가져와준다.
두개의 컬럼 위도, 경도로 범위 검색을 원하므로 And로 두개를 묶어 사용했다.
위도 경도가 +- 0.01 범위를 갖는 데이터를 원하므로
Service단에서 아래와 같이 작성하면 된다.
@Service
public class LocationService {
public List<Location> getLocations(Double latitude, Double longitude) {
return locationRepository.findByLatitudeBetweenAndLongitudeBetween(latitude-0.01, latitude+0.01, longitude-0.01, longitude+0.01);
}
}