오늘의 인기 글
최근 글
최근 댓글
Today
Total
12-30 13:56
관리 메뉴

우노

[Kotlin] @Entity와 @Repository 본문

Web_App/Kotlin

[Kotlin] @Entity와 @Repository

운호(Noah) 2024. 12. 18. 14:39

@Entity

  • 목적

    • JPA의 Entity 클래스는 데이터베이스 테이블에 매핑되는 객체입니다.
    • 데이터베이스 테이블과 자바 객체 간의 매핑을 담당합니다.
  • 어노테이션

    • @Entity: 해당 클래스가 데이터베이스 테이블과 매핑된다는 것을 명시합니다.
    • @Table(name = "table_name"): 데이터베이스 테이블 이름을 지정할 수 있습니다.
    • @Id: 해당 필드가 기본 키(primary key)임을 지정합니다.
    • @GeneratedValue: 기본 키 값의 자동 생성 전략을 지정합니다.
      • 예: GenerationType.IDENTITY
    • @Column(name = "column_name"): 필드와 데이터베이스 컬럼 간의 매핑을 지정합니다.
  • 특징

    • Entity 클래스는 데이터베이스 작업을 직접 수행하지 않고, JPA에서 데이터를 저장하고 관리하기 위한 객체 모델입니다.
    • Entity 자체로는 비즈니스 로직을 수행하지 않으며, 단순히 데이터베이스와의 매핑을 위한 구조체 역할을 합니다.
  • 예시

      @Entity
      @Table(name = "user_table")
      public class User {
    
          @Id
          @GeneratedValue(strategy = GenerationType.IDENTITY)
          @Column(name = "user_id")
          private Long id;
    
          @Column(name = "username")
          private String username;
    
          @Column(name = "email")
          private String email;
    
          // Getters and Setters
      }
    
  • 복합 기본키 예시

      // 복합 기본키 클래스를 @Embeddable로 정의
      @Embeddable
      public class OrderDetailId implements Serializable {
          private Long orderId;
          private Long productId;
      }
    
      // 복합 기본키를 @EmbeddedId로 엔티티에 포함
      @Entity
      public class OrderDetail {
          @EmbeddedId
          private OrderDetailId id;
    
          private Integer quantity;
          private BigDecimal price;
      }

@Repository

  • 목적

    • Repository는 주로 특정 Entity를 기준으로 데이터베이스에 접근하는 기능을 제공합니다.
    • JpaRepository나 CrudRepository를 상속받은 인터페이스는 해당 Entity에 대한 CRUD 기능을 자동으로 제공합니다.
  • 특징

    • Repository는 기본적으로 특정 Entity를 다룹니다.
    • 이를 기반으로 쿼리 메소드나 네이티브 쿼리를 실행하여 데이터를 처리합니다.
    • JpaRepository는 기본적인 CRUD 기능 외에도 페이징, 정렬, 복잡한 쿼리 등을 처리할 수 있습니다.
  • 예시

      public interface UserRepository extends JpaRepository<User, Long> {
          List<User> findByUsername(String username);
      }
    • 위의 예시에서 UserRepository는 User 엔티티와 관련된 쿼리만 다루며,
    • findByUsername 메서드는 User 엔티티를 기반으로 데이터를 조회합니다.
  • nativeQuery 사용 예시

      public interface UserRepository extends JpaRepository<User, Long> {
    
          @Query(value = "SELECT * FROM another_table WHERE condition = ?1", nativeQuery = true)
          List<Object[]> findByCustomQuery(String condition);
      }
    • nativeQuery를 사용하면 Entity와 관계없는 다른 테이블을 참조하거나 복잡한 SQL 쿼리를 작성하여 데이터베이스 작업을 할 수 있습니다.

기타

  • DataSource 설정
    • application.properties 또는 application.yml 파일에서 DataSource를 설정하여 JPA가 사용할 데이터베이스 연결 정보를 제공합니다.
    • Spring Data JPA는 이 설정을 통해 데이터베이스와의 연결을 관리하고, Entity에 매핑된 데이터를 쿼리 및 저장합니다.

'Web_App > Kotlin' 카테고리의 다른 글

[Kotlin] Controller와 Service의 계층 구조  (0) 2024.12.20
[Kotlin] @SqlResultSetMapping  (0) 2024.12.20
[Kotlin] ORM, JPA, Spring Data JPA  (1) 2024.12.18
[Kotlin] DTO와 Entity의 관계  (0) 2024.12.17
[Kotlin] @Scheduled 란?  (0) 2024.12.02
Comments