-
2023년 1월 6일Today I Learned 2023. 1. 6. 23:15
JPA Specification
JpaSpecificationExecutor
// repositories/PlaceRepository.java public interface PlaceRepository extends JpaRepository<Place, Long>, JpaSpecificationExecutor<Place> { Optional<Place> findByInformationName(String placeName); }
Specification 객체
// specifications/PlaceSpecification.java public class PlaceSpecification { public static Specification<Place> likeInformationName( String informationName ) { return new Specification<Place>() { @Override public Predicate toPredicate(Root<Place> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) { return criteriaBuilder.like( root.get("information") .get("name"), "%" + informationName + "%"); } }; // return (root, query, criteriaBuilder) -> criteriaBuilder.like( // root.get("information") // .get("name"), // "%" + keyword + "%"); } }
Service
// services/SearchPlacesService.java public class SearchPlacesService { private final PlaceRepository placeRepository; public SearchPlacesService(PlaceRepository placeRepository) { this.placeRepository = placeRepository; } public PlaceSearchResultsDto searchPlaces(String keyword) { Specification<Place> specification = Specification.where(PlaceSpecification.likeInformationName(keyword)); List<PlaceSearchResultDto> placeSearchResultDtos = placeRepository.findAll(specification) .stream() .map(Place::toSearchResultDto) .toList(); return new PlaceSearchResultsDto(placeSearchResultDtos); } }
References
- root.get: https://dev-setung.tistory.com/20
array.splice() vs array.slice()
splice는 원본 배열을 변경 >> 원본 배열에 가변
slice는 새로운 배열을 생성해 변경 >> 원본 배열은 불변
아직 직접 검증하지 않음
'Today I Learned' 카테고리의 다른 글
2023년 1월 8일 (0) 2023.01.08 2023년 1월 7일 (0) 2023.01.07 2023년 1월 5일 (0) 2023.01.05 인수 테스트 코드 리팩터링-1 (0) 2023.01.03 CodeceptJS에서 로그인하지 않고 특정 페이지에 접속하는 경우 인가 정보를 가져오지 못하는 문제 해결 과정 (0) 2023.01.02