Spring Data: 76개의 글
| 스프링 데이터 도메인 이벤트 스프링 프레임워크에서는 주로 IoC 컨테이너에 접근하기 위한 ApplicationContext 인터페이스를 제공합니다. 이 ApplicationContext는 ApplicationEventPublisher를 상속받기 때문에 사용자가 정의한 이벤트나 스프링 프레임워크에서 미리 정의한 이벤트를 publish하는 기능도 제공하고 있습니다. 사용자가 정의한 이벤트를 수신하기 위해서는 리스너를 정의하여 해당 클래스에 맞는 이벤트를 받아 처리하면 됩니다. | 스프링 데이터 도메인 이벤트 예제 프로젝트 구조 ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── tutorial │ │ │ └── springdatarepository │ │ ..
| 스프링 데이터 커스텀 리포지터리 스프링 데이터에서 제공하는 쿼리 메서드로 어떤 특정 비즈니스 로직을 구현하는 데 어려움이 있을 경우 직접 코딩으로 구현할 수 있습니다. | 스프링 데이터 커스텀 리포지터리 예제 프로젝트 구조 ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── example │ │ │ └── demo │ │ │ ├── DemoApplication.java │ │ │ └── post │ │ │ ├── PostCustomRepositoryImpl.java │ │ │ ├── PostCustomRepository.java │ │ │ ├── Post.java │ │ │ └── PostRepository.java │ │ └── resources │ ..
| 스프링 데이터 쿼리 만들기 스프링 데이터에서 Repository 인터페이스 내에서 메서드명으로 쿼리를 만드는 방법은 다음과 같습니다. 메서드 이름을 분석해서 쿼리 만들기 (CREATE) 미리 정의해 둔 쿼리를 찾아 사용하기 (USE_DECLARED_QUERY) 미리 정의한 쿼리를 보고 없으면 만들기 (CREATE_IF_NOT_FOUND) 메서드 이름을 정의할 때 다음과 같은 규칙에 따라 메서드명을 정해야 합니다. 왜냐하면 스프링 데이터에서 그 메서드명을 해석하여 쿼리를 만들기 때문입니다. 리턴타입 {접두어}{도입부}By{프로퍼티 표현식}(조건식)[(And|Or){프로퍼티표현식}(조건식)]{정렬조건}(매개변수) 접두어 : find, get, query, count ... 도입부 : Distinct, F..
| 스프링 데이터 Null 체크 스프링에서는 다음과 같이 null 체크를 할 수 있는 기능들을 제공하고 있습니다. @NoRepositoryBean public interface MyRepository extends Repository { E save(@NonNull E entity); List findAll(); long count(); @Nullable Optional findById(ID id); } @NonNull은 파라미터에 null 값이 들어오는 것을 방지하기 위한 어노테이션입니다. @Nullable은 이 메서드에서 null값을 허용하는 지를 명확하게 보여주기 위한 표시입니다. Repository 인터페이스에 리턴값을 Optional로 감싸서 후에 null값을 처리하게 할 수 있습니다. http..
| 스프링 데이터 리포지터리 인터페이스 정의하기( Spring Data Repository Interface ) 기본적으로 Spring JPA에서 제공하는 JpaRepository, CrudRepository를 사용하지만 만일 추가적인 기능을 개발하는 개발자에게 특정 메서드만 노출시킨다거나 아니면 삭제 관련 메서드(deleteAll)를 감추고 싶을 경우 Repository 인터페이스를 직접 정의할 수 있습니다. | 리포지터리 인터페이스 예제 (@RepositoryDefinition) 프로젝트 구조 ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── tutorial │ │ │ └── springbootjpa │ │ │ ├── Comment.java │ │ │..
| 스프링 데이터 Common 리포지터리 예제 프로젝트 구조 ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── tutorial │ │ │ └── springbootjpa │ │ │ ├── Post.java │ │ │ ├── PostRepository.java │ │ │ ├── SpringBootJpaApplication.java │ │ └── resources │ │ ├── application.properties │ │ ├── static │ │ └── templates │ └── test │ └── java │ └── com │ └── tutorial │ └── springbootjpa │ └── PostRepositoryTest.java 의존성 관리..
| 스프링 데이터 JPA 소개 및 원리 스프링 데이터 JPA에서는 다음과 같이 JpaRepository 인터페이스를 상속하는 인터페이스를 정의하면 이 인터페이스를 통해 RDBMS, NoSQL 등의 Repository와 데이터를 주고받을 수 있는 빈을 자동적으로 등록하는 기능을 제공합니다. public interface PostRepository extends JpaRepository { } 위에서 정의한 인터페이스는 다음과 같이 @Autowird와 같은 빈을 주입하는 어노테이션을 추가함으로서 사용할 수 있습니다. @Component @Transactional public class JpaRunner implements ApplicationRunner { @Autowired PostRepository po..
| JPQL (HQL) Java Persistence Query Language / Hibernate Query Language 를 의미하는 것으로써 데이터 베이스 테이블이 아닌, 엔티티 객체 모델 기반으로 쿼리를 작성하는 SQL과 유사한 구문입니다. JPA 또는 Hibernate가 해당 쿼리를 SQL로 변환해서 실행하게 됩니다. TypedQuery query = entityManager.createQuery("SELECT p FROM Post AS p", Post.class); List posts = query.getResultList(); posts.forEach(System.out::println); | Criteria JPA에서 제공하는 타입 세이프한 쿼리로써 JPQL에서 오타가 났을 경우 이것을..
| JPA Fetch JPA Fetch는 연관 관계의 엔티티를 어떻게 가져올 것인지를 정하는 정책입니다. Eager(초기) 혹은 Lazy(나중) 옵션을 지정하여 어떻게 연관 관계의 엔티티를 가져올 것인지를 정할 수 있습니다. | JPA Fetch 예제 @OneToMany 프로젝트 구조 ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── tutorial │ │ │ └── springbootjpa │ │ │ ├── Account.java │ │ │ ├── Address.java │ │ │ ├── Comment.java │ │ │ ├── JpaRunner.java │ │ │ ├── Post.java │ │ │ ├── SpringBootJpaApplication...
| 엔티티 Cascade 엔티티 Cascade는 엔티티의 상태 변화를 전파시키는 옵션입니다. 단방향 혹은 양방향으로 매핑되어 있는 엔티티에 대해 어느 한쪽 엔티티의 상태(생성 혹은 삭제)가 변경되었을 시 그에 따른 변화를 바인딩된 엔티티들에게 전파하는 것을 의미합니다. | Cascade 옵션을 주지 않았을 경우 프로젝트 구조 ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── tutorial │ │ │ └── springbootjpa │ │ │ ├── Comment.java │ │ │ ├── JpaRunner.java │ │ │ ├── Post.java │ │ │ ├── SpringBootJpaApplication.java │ │ └── resources ..