쌓고 쌓다
JPA findBy로 특정 범위내 숫자 컬럼 검색하는법 본문
서버에 위도 경도를 쿼리 파라미터로 요청하면
요청한 위도 경도를 통해 특정 범위내에 속하는 데이터를 응답으로 보내는 로직이 필요했다!
어떻게 할까?
먼저 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);
}
}
'프로그래밍 > JPA' 카테고리의 다른 글
Entity의 List 필드(컬렉션)는 초기화 해주자 (0) | 2024.03.08 |
---|---|
JPA(hibernate) INSERT, UPDATE, DELETE 순서 주의사항 (1) | 2024.02.24 |
JPA의 FindBy와 FindAllBy 차이점! (+NonUnique) (0) | 2023.11.30 |
JPA로 INSERT할때 MySQL 테이블 DEFAULT 값 넣기 (2) | 2023.11.20 |
JPA find 후 엔티티 변경시 UPDATE가 안날라갈때 with Transaction (0) | 2023.11.10 |
Comments