Spring Data: 76개의 글
| Spring JPA Specification Spring JPA Specification은 Spring JPA에서 제공하는 검색 조건을 메서드 형태로 추상화하여 Repository 인터페이스에서 해당 검색 조건을 조합하고 쿼리하기 쉽게 할 수 있는 기능입니다. | Spring JPA Specification 예제 프로젝트 구조 +---src | +---main | | +---java | | | \---com | | | \---tutorial | | | \---springboot | | | Application.java | | | Comment.java | | | CommentRepository.java | | | CommentSpecs.java | | | | | \---resources | | | a..
| Spring JPA Projection Spring JPA에서 제공하는 Projection 기능은 엔티티의 일부 데이터만을 가져오게 하는 기능입니다. Projection은 인터페이스 기반으로 구현되며 이 인터페이스를 가지고 Repository의 반환값에 명시하면 이 정보를 토대로 JPA가 해당 쿼리를 최적화해서 가져올 수 있거나 표현식을 사용하여 DB에서 데이터를 커스터마이징하여 가져올 수 있습니다. | Spring JPA Projection 예제 프로젝트 구조 ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── tutorial │ │ │ └── springevent │ │ │ ├── Application.java │ │ │ ├── Comment.jav..
| EntityGraph란 엔티티들은 서로 연관되어 있는 관계가 보통이며 이 관계는 그래프로 표현이 가능합니다. EntityGraph는 JPA가 어떤 엔티티를 불러올 때 이 엔티티와 관계된 엔티티를 불러올 것인지에 대한 정보를 제공합니다. FetchType.LAZY 와 FetchType.EAGER로 연관 엔티티를 가져올 것인지를 결정할 수 있습니다. 하지만 이 구문은 정적이며 런타임 시 이 설정을 변경하지 못하는 단점이 있었습니다. EntityGraph는 이러한 점을 보완하고 연관 엔티티를 어떻게 로딩할 것인지에 대한 정보를 제공함으로서 엔티티 로딩 속도를 높일 수 있는 장점이 있습니다. | EntityGraph 예제 프로젝트 구조 ├── src │ ├── main │ │ ├── java │ │ │ └─..
| Named Parameter @Query 어노테이션을 통해서 매개변수를 ?1, ?2 꼴과 같이 참조하는 것이 아니라 이름으로 다음과 같이 참조할 수 있습니다. @Query("SELECT p FROM Post as p where p.title = :title") List findByTitle(@Param("title") String title, Sort sort); | SpEL @Query에서 엔티티 이름을 #{#entityName}으로 변경할 수 있습니다. 이 표현식의 이점은 엔티티의 이름을 변경할 때 이 @Query 어노테이션 문을 변경하지 않고 사용할 수 있다는 점입니다. @Query("SELECT p FROM #{#entityName} as p where p.title = :title") Lis..
| Spring JPA 쿼리 메서드 Spring JPA에서 DB에 쿼리를 날릴 때 사용할 수 있는 방법은 크게 3가지가 있습니다. 1. 리포지터리 메서드 2. @NamdeQuery 3. @Query [Spring Framework/Spring JPA] - [Spring JPA #13] 스프링 데이터 쿼리 만들기 | Spring JPA 쿼리 메서드 예제 Repository 인터페이스에 메서드명으로 어떤 쿼리를 날릴 지 정할 수 있습니다. pository 인터페이스에 메서드명으로 어떤 쿼리를 날릴 지 정할 수 있습니다. public interface PostRepository extends JpaRepository { List findByTitleStartsWith(String title); } "Title..
| 스프링 데이터 JPA 엔티티 저장 상태 전이 스프링 데이터 JPA에서는 기본적으로 JpaRepository를 통해 DB와 상호작용하게 됩니다. JpaRepository는 save 메서드들 통해 DB에 엔티티 정보를 저장하게 됩니다. save 메서드는 단순히 새 엔티티를 DB에 추가하는 것이 아니고 엔티티의 상태에 따라 다른 동작방식을 보입니다. 아래의 조건에 따라 엔티티를 관리해주는 EntitiyManager는 엔티티의 상태를 추적해서 DB에 반영할지 아니면 업데이트를 할 지 결정하게 됩니다. 엔티티의 @Id를 기준으로 해당 프로퍼티가 null이면 Transient 상태로 판단하고 id가 null이 아니면 Detached 상태로 판단합니다. 만일 @Id가 null일 경우 save 메서드로 엔티티를 D..
| 스프링 데이터 HATEOAS HATEOAS에 대한 설명은 아래 링크로 대신하겠습니다. [Spring Framework/Spring boot2] - [Spring Boot #19] 스프링 부트 Spring HATEOAS | 스프링 데이터 HATEOAS 예제 프로젝트 구조 ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── tutorial │ │ │ └── springevent │ │ │ ├── Application.java │ │ │ ├── PostController.java │ │ │ ├── Post.java │ │ │ └── PostRepository.java │ │ └── resources │ │ └── application.properties │ ..
| 스프링 데이터 Pageable과 Sort 프로젝트 구조 ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── tutorial │ │ │ └── springevent │ │ │ ├── Application.java │ │ │ ├── PostController.java │ │ │ ├── Post.java │ │ │ └── PostRepository.java │ │ └── resources │ │ └── application.properties │ └── test │ └── java │ └── com │ └── tutorial │ └── springevent │ └── PostControllerTest.java 의존성 관리 org.springframework...
| 스프링 데이터 DomainClassConverter 스프링에서 Converter는 컨트롤러에 사용자 요청이 오게될 때, 요청값을 다른 타입으로 변환하여 컨트롤러의 메서드에 전달하는 역할을 하는 인터페이스를 의미합니다. DomainClassConverter는 이 개념을 확장하여 어떤 사용자 요청에 대한 요청값을 도메인 클래스로 변환하여 컨트롤러의 메서드에 전달하는 Converter를 의미합니다. | 스프링 데이터 DomainClassConverter 예제 프로젝트 구조 ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── tutorial │ │ │ └── springevent │ │ │ ├── Application.java │ │ │ ├── PostCont..
| QueryDsl이란 QueryDsl은 Type-Safe한 쿼리를 위한 스프링에서 제공하는 Domain Specific Language입니다. SQL같이 문자로 Type Check가 불가능하고 실행하기 전까지 작동 여부를 확인 하기 어려운 부분을 보완하여 SQL을 Java로 Type-Safe하게 개발 할 수 있게 해주는 프레임워크입니다. Repository 인터페이스에서 메서드명이 너무 길어지거나 메서드명으로 쿼리문을 만들기 까다로운 조건일 때 유용하게 쓰일 수 있습니다. | QueryDsl Qdomain 생성하기 프로젝트 구조 ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── tutorial │ │ │ └── springevent │ │ │ ├── A..