프로그래밍/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);
    }

}