본문 바로가기

Web App/Spring Data JPA13

Spring Data JPA - Entity, 관계 매핑 Spring Data JPA 목표 - Entity 만들어 릴레이션과 매핑한다. - Value 타입을 매핑한다. - 관계(1대다, 단방향, 양방향)를 설정한다. application.properties # datasource 설정 - postgreSQL DB spring.datasource.url=jdbc:postgresql://localhost:5432/postgres spring.datasource.username=postgres spring.datasource.password=1234 # hibernate 설정 spring.jpa.hibernate.ddl-auto=create # hibernate WARN 경고 출력 방지 spring.jpa.properties.hibernate.jdbc.lob.non.. 2021. 2. 11.
Spring Data JPA - Auditing Spring Data JPA 014 - Auditing Auditing은 생성일자, 생성자, 수정일자, 수정자를 자동으로 등록할 수 있도록 도와준다. 엔티티의 변경 시점에 위 정보를 기록하는 기능이다. 예제를 보자. @Getter @Setter @Entity @EntityListeners(AuditingEntityListener.class) public class Comment { @Id @GeneratedValue private Long id; private String comment; @ManyToOne(fetch = FetchType.LAZY) private Post post; ... @CreatedDate private Date created; @CreatedBy @ManyToOne private.. 2021. 2. 11.
Spring Data JPA - Transactional Spring Data JPA - Transactional Transaction 스프링 데이터 JPA가 제공하는 Repository의 모든 메소드는 @Transactional이 적용되어 있다. @Transactional 애노테이션을 들여다 보자. 클래스, 인터페이스, 메소드에 사용할 수 있고, 메소드에 가장 가까운 애노테이션의 우선순위가 높다. RuntimeException 또는 Error 가 발생하면 rollback 이 자동으로 일어난다. 특별한 롤백 옵션을 추가할 수도 있다. Transaction manager 를 설정할 수도 있지만 기본은 jpa transactionManager 를 사용한다. Isolation 은 여러 레벨로 설정할 수 있고, 데이터의 동시성(성능)과 무결성(신뢰성)을 조절할 수 있.. 2021. 2. 11.
Spring Data JPA - 여러 기능 2 Spring Data JPA - 여러가지 기능 2 Projection project 란 릴레이션에서 select 할 때 원하는 컬럼 가져오는 것이다. select * from table 처럼 모두를 가져올 수도 있고, 아니면 컬럼 이름을 적어서 일부만 가져올 수도 있다. Closed 프로젝션 인터페이스 기반 프로젝션과 클래스 기반 프로젝션이 있는데, 인터페이스 기반을 먼저 해보자. 조금 더 코드가 덜 많다. 클로즈드 프로젝션은 원하는 attribute 만 선택해서 가져오는 것이므로 쿼리의 성능을 최적화 할 수 있다. public interface CommentSummary { String getComment(); int getUp(); int getDown(); } public interface Comm.. 2021. 2. 11.
Spring Data JPA - 여러 기능 1 Spring Data JPA - 여러가지 기능 1 JPA 쿼리 메소드 JPA 에서 쿼리메소드 사용시 아래와 같은 키워드를 제공한다. And, Or Is, Equals LessThan, LessThanEqual, GreaterThan, GreaterThanEqual After, Before IsNull, IsNotNull, NotNull StartingWith, EndingWith, Containing=isContaining=Contains, Like(와일드카드와 함께) OrderBy Not, In, NotIn True, False IgnoreCase 쿼리를 찾아서 사용하는 기능도 제공한다. 엔터티에 정의한 쿼리를 찾아 사용할 수 있다. @NamedQuery, @NamedNativeQuery @NamedQ.. 2021. 2. 11.
Spring Data Common - Web 기능 Spring Data JPA - Web 스프링 데이터는 다양한 웹 지원 기능을 제공한다. 스프링부트를 사용할 시 모든 것이 자동 설정된다. 일반 스프링을 사용하는 경우 자바 설정 파일에 @Configuration 과 함께 @EnableSpringDataWebSupport 를 붙이면 된다. Spring Data 가 지원하는 여러 웹 기능을 알아보자. 도메인 클래스 컨버터 Pageable, Sort @RequestHandler 메소드에서 Pageable, Sort 매개변수를 사용할 수 있다. HATEOAS 또한 Page 관련해서 HATEOAS 기능을 제공한다. HATEOAS 란 Hypermedia As The Engine Of Application State 의 약자로 쉽게 말해, 리소스 자원의 위치(uri.. 2021. 2. 10.
Spring Data JPA - JPA Repository, save Spring Data JPA - JPA Repository 스프링 부트를 사용할 때는 @EnableJpaRepositories 가 자동으로 등록된다. @SpringBootApplication 안에 연결되어 있다. 스프링 부트는 사용하지 않는다면 @Configuration 과 위 어노테이션을 같이 사용해주면 JpaRepository를 사용할 수 있다. JpaRepository 의 구현체인 SimpleJpaRepository 에 이미 @Repository 가 이미 붙어있기 때문에 빈 으로 등록하기 위해 JpaRespository 에 @Repository 를 꼭 붙이지 않아도 된다. 스프링이 제공하는 @Repository 는 SQLException 또는 JPA와 관련된 Exception을 스프링의 DataAc.. 2021. 2. 10.
Spring Data Common - QueryDSL 쿼리 메소드는 대부분 두 가지 중 하나로 결정된다. Optional findOne(Predicate) : 어떤 조건으로 1개를 찾는다. List|Page|Iterable ... findAll(Predicate) : 어떤 조건으로 여러개를 찾는다. 스프링 데이터는 QuerydslPredicateExecutor 인터페이스를 제공한다. 여러 메소드가 있지만 위의 2가지가 대표적이다. 너무 긴 쿼리메소드는 무엇을 실행시키는지 읽기가 너무 어렵다 그래서 쿼리 DSL 을 사용한다. QueryDSL query domain specific lanaguage (쿼리 도메인 특화 언어) 를 말한다. 타입-세이프한 쿼리를 만들 수 있도록 돕는 라이브러리이다. JPA, SQL, MongoDB, JDO, Lucene, Coll.. 2021. 2. 10.
Spring Data Common - 도메인 이벤트 이벤트 프로그래밍 스프링 프레임워크는 이벤트 기능을 제공한다. ApplicationContext 는 BeanFactory 인터페이스를 상속받았고, ApplicationEventPublisher 인터페이스도 상속받은 인터페이스이다. 이벤트는 ApplicationEvent 를 상속받아 만들면 되고, 리스너는 ApplicationListener를 구현하여 만들면 된다. 또는 스프링부트가 제공하는 어노테이션 @EventListener를 사용해도 된다. 1 이벤트 생성 @Getter public class PostPublishEvent extends ApplicationEvent { private final Post post; public PostPublishEvent(Object source) { super(s.. 2021. 2. 10.
Spring Data Common - 커스텀 Repository Spring Data JPA - Repository Custom Repository 짤막한 Intellij 단축키 Tip command + 1 : 왼쪽 옆에 프로젝트 창 커서가도록 하기 esc : 다시 코드 창으로 커서가 온다. command + ` : 프로젝트 2개이상 띄워져있을 때 프로젝트 변경 shift + command + T : Test 로 탭 전환 쿼리 메소드(쿼리 생성 및 쿼리 찾아쓰기)로 해결되지 않는 경우 코딩으로 스프링 데이터 리포지토리 인터페이스에 필요한 기능을 직접 구현 가능하다. 1) 새로운 기능을 추가 테스트 코드 @DataJpaTest class PostRepositoryTest { @Autowired PostRepository postRepository; @Test publi.. 2021. 2. 10.