Spring/Spring Data JPA
-
Spring Data JPA 3. 쿼리 메서드Spring/Spring Data JPA 2020. 6. 2. 00:30
쿼리 메서드 정의하기 2가지 방법 메서드 이름에서 직접 쿼리를 끄집어내는 방법 직접 정의되어 있는 쿼리를 애노테이션을 통해 가져오는 방법 Query를 가져오는 전략 3가지 EnableJPARepositories에 보면 queryLookupStrategy라는 애노테이션이 있고 3가지 중 하나를 설정할 수 있다. 1. CREATE 쿼리 메소드 이름 가지고 쿼리를 만든다. well-known prefix를 제거하고 나머지를 파싱해서 메서드를 만든다. findById 등 2. USE_DECLARED_QUERY 미리 정의된 쿼리를 찾으려 한다. 찾지 못하면 예외를 던지게 된다. App이 뜨는 시점에 쿼리를 못 찾으면 fail. 3. CREATE_IF_NOT_FOUND ( default ) 1,2를 합친 것. 선언..
-
Spring Data JPA 2. null 처리 관련 애노테이션Spring/Spring Data JPA 2020. 6. 1. 23:00
리포지토리를 튜닝해보기 리포지토리는 Repository, CrudRepository, PagingAndSortingRepository를 상속받을 것이다. @RepositoryDefinition 이런 상속을 받고 싶지 않은 경우 애노테이션으로 처리가 가능하다. @RepositoryDefinition로 가능하며 CrudRepository를 상속받는 식으로 만든다면 메서드 들은 전부 공개가 되게 되지만 이런 어노테이션 방식은 노출하고 싶은 메서드만 노출이 가능한 것 같다. @NoRepositoryBean 다음과 같이 CRUD repository를 대신하는 Repository만 쓰고 Repository는 빈 영역이니 직접 CRUD repository를 만들고 선택적인 노출을 가능하게 할 수도 있다. 스프링 데이..
-
JPA의 Dialect(방언)Spring/Spring Data JPA 2020. 5. 25. 15:09
Dialect(방언)이란? SQL은 다음과 같이 표준 SQL인 ANSI SQL이 있으며 ANSI SQL 이외에 각 DBMS Vendor(벤더, 공급업체)인 MS-SQL, Oracle, MySQL, PostgreSQL 에서 자신만의 기능을 추가한 SQL이 있다. ANSI SQL이 모든 DBMS에서 공통적으로 사용가능한 핵심 표준 SQL이지만 여러 제품의 DBMS에서는 자신만의 독자적인 기능을 위해서 추가적인 SQL을 만들었다. 예를 들어 MS-SQL의 T-SQL 그리고 Oracle의 PL/SQL이 대표적이다. 또한 기본키를 할당하는 방법에도 MySQL의 경우는 AUTO_INCREMENT라는 기능과 오라클 DB에는 시퀀스라는 기능이 있다. 이것은 마치 대한민국의 수도인 서울에서 사용하는 표준어가 있고 충청,..
-
영속성 컨텍스트(persistence context)Spring/Spring Data JPA 2020. 5. 24. 00:53
Entity 객체의 생명주기 New ( 비 영속 객체 ) : Entity 객체가 DB에 반영되지 않았고, Managed 상태가 아닌 상태를 말한다. 이 상태는 new 키워드를 사용해 생성한 Entity 객체를 말하고 영속화되지 않는다. Managed ( 영속 객체 ) : . New (비 영속 객체) 상태에서 persist 메소드를 이용해 저장한 경우이다. Removed ( 삭제 객체 ) : 이 상태에 객체는 작업 단위가 종료되는 동시에 DB에서 삭제되므로 재사용하면 안된다. Detached ( 준 영속 객체 ) : 이 상태는 더 이상 DB와 동기화를 보장하지 않는다. 다시 Managed (영속 객체) 상태로 만들기 위한 merge 메소드가 존재한다. 기본적으로 Open EntityManager in Vi..
-
Spring Data JPA 1. 상속구조와 주요 인터페이스Spring/Spring Data JPA 2020. 5. 12. 00:39
JpaRepository - PagingAndSortingRepository - CrudRepository - Repository 이러한 상속 구조와 각 인터페이스의 역할을 이해해보자. 제일 밑단에 있는 영속화 기술에 특화된 JpaRepository를 빼면 나머진 다른 영속화 기술용 리파지토리에서도 재사용하는 공용 인터페이스들이다. 이 인터페이스들을 자세히 살펴보자. Spring Data Repository 사용하기 다양한 영속성 저장소를 위해 데이터 접근 레이어를 구성할 때 코드들의 양을 상당히 줄일 수 있도록 하는 게 Repository이다. 다양한 쿼리 키워드를 제공하는데 우리가 Repository를 만들고 메서드를 만든다. 이때 메서드에 특정한 키워드를 만든다면 쿼리를 만들어주게 된다. 예를들어 ..
-
하이버네이트 ORM User guide 1Spring/Spring Data JPA 2020. 5. 11. 03:00
하이버네이트는 자바에서 쓸 수 있는 ORM 설루션이다. ORM이라는 용어는 객체 모델을 관계형 모델로 매핑할 수 있는 기술이다. 혹은 관계형 모델을 객체 모델로 매핑한다거나. 즉 둘 간의 불일치한 패러다임을 일치시켜주는 기술이다. 하이버네이트는 매핑 뿐아니라 쿼리도 할 수 있고 데이터를 가져오는 기능도 제공을 한다. 이로써 SQL이나 JDBC를 직접 다루지 않고 하이버네이트로 감싸주다 보니 SQL에 종속적인 개발을 막아준다. 하이버네이트가 가장 유용한 경우는 비즈니스 로직이 자바 기반이고 객체 기반의 도메인 모델에서 가장 유용하다고 한다. JDBC위에 하이버네이트가 올라가고 하이버네이트를 한번더 감싼 게 JPA이다. Hibernate가 제공하는 natvie 한 API를 사 용해서 Hibernate를 쓰거..
-
JPA의 도메인 클래스 컨버터 자동 등록Spring/Spring Data JPA 2020. 4. 25. 02:06
이전에 살펴보았던 Formatter은 도메인 클래스에 name으로 맵핑을 했지만 보통은 id로 하게 된다. 그럼 이제 id를 받아서 person으로 변경을 한 후에 이름을 출력한다던가 하는 일을 해보자. 이 경우 이전과 마찬가지로 Formatter나 Converter를 이용하게 되지만 이번에는 만들지 않고 JPA의 도움을 받아서 만들 어보자. 스프링 데이터 JPA가 지원해주는 기능 중에 도메인 클래스 컨버터 기능이 있다. 이 기능은 아이디에 해당하는 도메인 클래스로 변환을 해주는 컨버터가 자동으로 등록이 된다. 의존성에 h2와 jpa만 추가해준 후 Person 클래스에 @Entity를 붙여준다. 그리고 PersonRepository를 만든다. Id값에서 Entity로 컨버팅 할때 리포지토리를 사용하므로 ..