728x90
반응형
SMALL
지난 포스팅에 이어서 Spring Data JPA, JPQL 어노테이션을 알아보겠습니다.
https://jisaydeveloper.tistory.com/39
[Spring Boot] DB관련 어노테이션 (2) - 연관 관계
지난 포스팅에 이어서 이번엔 연관 관계 어노테이션을 알아보겠습니다. https://jisaydeveloper.tistory.com/38 [Spring Boot] DB관련 어노테이션 (1) - 엔티티 스프링 부트에서 데이터 베이스와 상호 작용하기
jisaydeveloper.tistory.com
Spring Data JPA, JPQL
- @Repository : 스프링 데이터 JPA에서 사용되며, 데이터 액세스 계층의 구성 요소를 나타냅니다.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String email;
}
@Repository
public interface UserRepository extends CrudRepository<User, Long> {
User findByUsername(String username);
}
※ @Repository는 JpaRepository를 상속받아 사용하면 사용할 필요가 없는데 그 이유는 Spring Data JPA가 JpaRepository 인터페이스를 스캔하여 빈으로 자동 등록하기 떄문입니다.
public interface UserRepository extends JpaRepository<User, Long> {}
- @Query : JPQL 쿼리를 정의한 메서드를 생성합니다.
- @Param : 메서드의 매개 변수와 JPQL 쿼리 파라미터를 연결합니다.
public interface UserRepository extends JpaRepository<User, Long> {
@Query("SELECT u FROM User u WHERE u.username = :username")
User findByUsername(@Param("username") String username);
}
- @NamedQuery : 이름을 가진 JPQL 쿼리를 정의할 때 사용합니다.
메서드에 직접 JPQL 쿼리를 작성하는 대신 이름을 사용하여 참조할 수 있습니다.
@NamedQuery(name = "User.findByUsername", query = "SELECT u FROM User u WHERE u.username = :username")
User findByUsername(@Param("username") String username);
- @NamedQueries : 여러 개의 @NamedQuery 어노테이션을 그룹화하고, 한 번에 여러 개의 JPQL 쿼리를 정의할 때 사용합니다.
@Entity
@NamedQueries({
@NamedQuery(name = "User.findByUsername", query = "SELECT u FROM User u WHERE u.username = :username"),
@NamedQuery(name = "User.findAllActive", query = "SELECT u FROM User u WHERE u.active = true"),
})
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String active;
}
- @EntityGraph :연관관계가 있는 엔티티를 조회할 경우 지연 로딩으로 설정되어 있으면 연관관계에서 종속된 엔티티는 쿼리 실행 시 select 되지 않고 proxy 객체를 만들어 엔티티가 적용시킵니다.
그 후 해당 proxy 객체를 호출할 때마다 그때 그때 select 쿼리가 실행됩니다.
public interface UserRepository extends JpaRepository<User, Long> {
@EntityGraph(value = "userWithRoles", type = EntityGraph.EntityGraphType.FETCH)
User findByUsername(String username);
}
@EntityGraph는 추후 더 자세한 내용으로 포스팅 하겠습니다.
- @CreatedDate & @LastModifiedDate : 엔티티의 생성일과 마지막 수정일을 자동으로 관리합니다.
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class User {
@Id
private Long id;
private String username;
@CreatedDate
private Date createdDate;
@LastModifiedDate
private Date lastModifiedDate;
}
728x90
반응형
LIST
'Study' 카테고리의 다른 글
[Java] 제네릭(Generic) (0) | 2023.10.27 |
---|---|
2023 벤처스타트업 SW개발인재 매칭 페스티벌 (0) | 2023.10.26 |
[Spring Boot] DB관련 어노테이션 (2) - 연관 관계 (0) | 2023.10.26 |
[Spring Boot] DB관련 어노테이션 (1) - 엔티티 (0) | 2023.10.25 |
프로세스(Process)와 스레드(Thread) (0) | 2023.10.20 |