전체 글(131)
-
스프링 데이터 JPA - Auditing, 엔티티에 등록일, 수정일, 등록자, 수정자 자동으로 적용하기!
데이터베이스의 테이블에 등록일, 수정일과 같은 정보는 시스템을 운영하는데 있어서 거의 모든 테이블에 필수적으로 들어가야하는 정보들이다. JPA에서는 @MappedSuperclass 어노테이션으로 베이스 엔티티를 설정 할 수 있고 베이스 엔티티를 상속받아 등록일, 수정일을 적용할 수 있다. 하지만 상속을 해야한다는 것이 꺼림직하다...하지만 스프링 데이터 JPA에서는 이와 같은 정보를 엔티티가 저장될때, 혹은 수정될때 상속없이 어노테이션으로 자동으로 처리할 수 있게 지원하고 있다. 그 방법을 알아보자! 1. @EnableJpaAuditing -> 스프링 부트 설정 클래스에 적용 2. @EntityListeners(AuditingEntityListener.class) -> Auditing을 적용할 엔티티에 ..
2021.02.08 -
스프링데이터 JPA - 사용자 정의 레퍼지토리 구현
사용자 정의 레퍼지토리 스프링데이터 JPA는 레퍼지토리만 인터페이스로 정의해두면 스프링데이터 JPA 규칙에 따라 해당 레퍼지토리 인터페이스를 구현하지 않아도 스프링이 내부적으로 구현클래스를 생성하여 제공해준다. 하지만 다양한 이유로 인해서 레퍼지토리의 구현을 직접 해야할 필요가 있을 수 있다. JPA 직접 사용(EntityManager) 스프링 JDBC Template 사용 MyBatis 사용 데이터베이스 커넥션 직접 사용 Querydsl 사용 그래서 스프링데이터 JPA에서는 사용자 정의 레퍼지토리를 구현할 수 있는 방법을 제공한다. 먼저 메인 레퍼지토리와는 별개로 사용자 정의 레퍼지토리를 따로 인터페이스로 정의 한다. 해당 레퍼지토리를 구현하는 클래스를 만든다 이때 구현 클래스명에 명명 규칙이 있다. ..
2021.02.07 -
스프링 데이터 JPA[쿼리 메서드] - 벌크 연산
벌크 연산이란? insert, update, delete 할때 단건이 아닌 다건으로 한번에 처리하는 쿼리 JPA에서 벌크 연산시 주의점! 벌크 연산 쿼리는 엔티티 매니저가 영속성 컨텍스트에 변경된 내용을 업데이트 하지 않고 바로 데이터베이스로 보내진다. 따라서 벌크 연산 후에 실제 데이터베이스와 영속성 컨텍스트의 엔티티 정보가 다를 수 있다! 그래서 벌크 연산 후에는 flush()와 clear()를 꼭 해줘서 이후의 로직에 대해 다시 영속 상태가 되도록 유도 해야한다! flushAutomatically, clearAutomatically 스프링 데이터 JPA에서는 해당 속성으로 flush()와 clear()를 자동으로 수행되게 할 수 있다. 여기서 flush는 clear하기 전에 혹시 모를 기존에 영속성..
2021.02.06 -
스프링데이터 JPA[쿼리 메서드] - 페이징
페이징 사용 예) 1 2 3 4 5 6 Page findByUsername(String name, Pageable pageable); //count 쿼리 사용 Slice findByUsername(String name, Pageable pageable); //count 쿼리 사용 안 함 List findByUsername(String name, Pageable pageable); //count 쿼리 사용 안 함 List findByUsername(String name, Sort sort); cs org.springframework.data.domain.Sort: 정렬 기능 org.springframework.data.domain.Pageable: 페이징 기능(내부에 Sort 포함) org.springfr..
2021.02.06 -
스프링데이터 JPA[쿼리 메서드] - @Query 어노테이션 사용법
@Query JPQL을 정의할 수 있는 어노테이션 1. JPA의 @NamedQuery에 정의된 쿼리를 정의하여 사용할 수 있다. @Entity @NamedQuery(name="Member.findAll", query="select m from Member m") public class Member { ... } public interface MemberRepository extends JpaRepository { @Query(name = "Member.findAll") List findAll(); } 위 예제와 같이 NamedQuery의 이름과 레퍼지포리의 메서드 이름이 같은 경우 @Query 어노테이션 생략 가능. 2. 컬럼 리스트 조회하기 @Query("select m.username from Mem..
2021.02.06 -
스프링데이터 JPA[쿼리 메서드] - 메서드 이름으로 쿼리 생성 규칙, 반환타입
쿼리 메서드의 메서드명으로 쿼리 생성시 명명 규칙에 대해 알아보자. 메서드 명명 규칙 조회: find…By ,read…By ,query…By get…By 예:) findHelloBy 처럼 ...에 식별하기 위한 내용(설명)이 들어가도 된다. COUNT: count…By 반환타입 long EXISTS: exists…By 반환타입 boolean 삭제: delete…By, remove…By 반환타입 long DISTINCT: findDistinct, findMemberDistinctBy LIMIT: findFirst3, findFirst, findTop, findTop3 자세한 규칙은 레퍼런스를 참고하자. 메서드 명명 규칙 스프링 공식 레퍼런스: docs.spring.io/spring-data/jpa/docs..
2021.02.06