Back-end
-
JPA - Common QueryDSLBack-end/JPA 2020. 6. 30. 17:16
QueryDSL(Domain Specific Language) JPA를 사용하다보면 메소드 이름을 통해 자동으로 쿼리를 생성했었습니다. findByFirstNameIngoreCaseAndLastNameStartsWithIgnoreCase(String firstName, String lastName) 위와 같은 네임을 가지고 있다면 가독성이 너무 떨어질 뿐더러 쿼리가 추가될 때마다 여러 조건들이 추가될 것입니다. 하지만 QueryDSL을 사용하게 되면 타입세이프하게 쿼리를 만들어 사용할 수 있습니다. 홈페이지 : querydsl 연동 방법 기본 리포지토리 커스터마이징 안 했을 때 먼저 Account 엔티티와 JpaRepository를 상속받는 Repository를 생성합니다. 그리고 빈 주입 테스트를 하기..
-
JPA - Common BasicRepositoryBack-end/JPA 2020. 6. 30. 17:14
BasicRepository 모든 리포지토리에 공통적으로 추가하고 싶은 기능이 있거나 덮어쓰고 싶은 기능이 있을 때 사용합니다. 구현하는 방법은 아래와 같습니다. JpaRepository를 상속 받는 인터페이스 정의하기 @NoRepositoryBean 기본 구현체를 상속 받는 커스텀 구현체 만들기 @EnableJpaRepositories에 설정하기 repositoryBaseClass 1. JpaRepository를 상속 받는 인터페이스 정의하기 @NoRepositoryBean public interface MyRepository extends JpaRepository { boolean contains(T entity); } 우선 공통으로 사용할 리파지토리를 생성하고 JpaRepository를 상속받습니다..
-
JPA - Common CustomRepositoryBack-end/JPA 2020. 6. 30. 17:12
CustomRepository 쿼리 메소드(쿼리 생성과 쿼리 찾아쓰기)로 해결이 되지 않는 경우 직접 코딩으로 구현 가능하도록 하는 방법입니다. 구현 방법의 순서는 아래와 같습니다. 커스텀 리포지토리 인터페이스 정의하기 인터페이스 구현 클래스 만들기 (기본 접미어는 Impl) 엔티티 리포지토리에 커스텀 리포지토리 인터페이스 추가하기 1. 커스텀 리포지토리 인터페이스 정의하기 Post Entity와 PostRepository를 생성합니다. jUnit4를 활용하여 의존성 주입이 잘 됐는지 확인하고 잘 되었다면 이상없이 테스트가 통과 될 것입니다. spring.jpa.properties.hibernate.format_sql=true logging.level.org.hibernate.type.descriptor..
-
JPA - Common QueryBack-end/JPA 2020. 6. 30. 17:10
Query 데이터를 다룰 때 사용할 쿼리를 메소드에 적용하는 방법에 대해 학습해보겠습니다. 총 3가지 방법이 있습니다. 직접 쿼리 작성하는 방법 메소드 이름 분석 위 두가지를 합친 방법 쿼리 만드는 방법 1. 메소드 이름을 분석해서 쿼리 만들기 (CREATE) 메소드 이름을 분석해서 스프링 데이터 JPA(Common)가 자동으로 쿼리를 만들어 줍니다. public interface CommentRepository extends MyRepository{ /* Comment title에 Keyword가 들어있는 모든 Comment를 찾아주는 메소드 */ List findByCommentContains(String Keyword); } 메소드 이름을 JPA가 지원하는 방식에 맞게 작성하면 자동으로 쿼리를 ..
-
JPA - Common NullBack-end/JPA 2020. 6. 30. 17:07
Null 처리 Null을 처리하는 방법에 대해서 학습해봅시다. 여기서 학습할 것은 두 방법입니다. 자바 8, 스프링 데이터 2.0 부터 지원하는 Optioanl 스프링 5.0부터 지원하는 Null관련 어노테이션 이전 사용했던 코드들을 계속 사용하기 때문에 Common Interface포스팅을 참고해주시면 되겠습니다. Optional 자바 8버전 부터 지원된 기능으로 단일 값을 사용하는 경우 사용합니다. Null을 체크하는 것이 아닌 Optional 인스턴스를 체크하게 됩니다. 최신 트렌디한 방법으로 사용되고 있습니다. Optional 기능 isPresent() : 값이 있는지 없는지 확인합니다. orElse : 없는 경우 다른 대체적인 인스턴스를 리턴하게 할 수도 있습니다. orElseThrow : 없는..
-
JPA - Common InterfaceBack-end/JPA 2020. 6. 30. 17:05
Interface JpaRepository에서 자동으로 지원되는 기능들을 사용하지 않고 직접 자신이 만든 메소드를 만들고 싶을 때 두 가지 방법을 활용하여 사용합니다. 각 엔티티 클래스의 각 Repository를 생성(@RepositoryDefinition) 통일된 Repository를 생성한 후 상속(@NoRepositoryBean) 위 두 방법을 학습하기 위해선 기존 Comment 엔티티 클래스와 Repository를 활용할 것이므로 엔티티 상태 포스팅을 참고해주시면 되겠습니다. @RepositoryDefinition 내가 원하는 엔티티 클래스에 직접 메소드를 적용시킬 때 사용합니다. 클래스와 Id의 타입을 선언하면 됩니다. @RepositoryDefinition(domainClass = Commen..
-
JPA - Common RepositoryBack-end/JPA 2020. 6. 30. 17:03
Repository Repository에는 4가지의 종류가 있습니다. Common Repository : 일반적인 Marker CrudRepository : CRUD 오퍼레이션 제공 PagingAndSortingRepository : 페이지와 정렬 JPA JpaRepository : Jpa 활용시 사용 이중 Common에 해당되는 Repository를 학습해보겠습니다. 기존 Post 엔티티 클래스와 Repository를 활용할 것이므로 이전 포스팅, JPA 원리 포스팅을 참고해주시면 되겠습니다. Repository 테스트 임베디드 DB 추가 com.h2database h2 test 로컬 데이터에 간섭하지 않고 테스트를 하기 위해 테스트 H2를 추가합니다. Test 클래스 @RunWith(SpringRun..
-
JPA - JPA의 원리Back-end/JPA 2020. 6. 30. 17:01
JPA의 원리 JPA가 동작하는 원리에 대해서 학습해보겠습니다. JpaRepository 인터페이스 위 인터페이스를 사용하면 기본적인 CRUD 기능을 포함한 내장 API를 사용할 수 있습니다. @Repository가 없어도 빈으로 등록해 줍니다. JpaRepository가 없을 때 로직 @Repository @Transactional public class PostRepository { @PersistenceContext EntityManager entityManager; public Post add(Post post) { entityManager.persist(post); return post; } public void delete(Post post) { entityManager.remove(post)..