Entity

  • 데이터베이스에 쓰일 필드와 여러 엔티티간 연관관계를 정의한다.
  • 데이터베이스는 엑셀처럼 2차원 테이블이라고 생각하면 되는데 이 테이블에 서비스에서 필요한 정보를 다 저장하고 활용하게 된다.
  • 아래 그림과 같이 세로의 열 부분이 Column이고 가로의 행 부분이 엔티티 객체가 된다.
  • 이 테이블 전체가 엔티티 이고, 각 1개의 행들이 엔티티 객체가 되는 것이라고 생각하면 된다.

  • 필드라는 것은 엔티티의 각 Column을 의미한다.
  • 아래 예시에서 private Long bno라고 적은 것 처럼 bno라는 필드를 정의하면 하나의 Column을 정의할 수 있는 것이다.
  • @로 시작되는 구문은 어노테이션이라고 부르는데 대부분은 엔티티와 데이터베이스를 매핑하는 JPA에서 사용되는 것이다.



@어노테이션

  • 대략적인 어노테이션의 개념만 알도록 하고 일단 따라하면서 만들고 속성, 옵션이나 주의사항은 나중에 익히는 것이 좋다. 천재가 아니기에 너무 많은 정보를 한 번에 이해할 수 없기 때문이다.

  • @Entity
    • 클래스 위에 선언하여 이 클래스가 엔티티임을 알려준다. 이렇게 되면 JPA에서 정의된 필드들을 바탕으로 데이터베이스에 테이블을 만들어준다.
  • @Builder
    • 해당 클래스에서 해당하는 엔티티 객체를 만들 때 빌더 패턴을 이용해서 만들 수 있도록 지정해주는 어노테이션이다. 이렇게 선언해놓으면 나중에 다른 곳에서 Boaed.builder().{여러가지 필드의 초기값 선언}.build()형태로 객체를 만들 수 있다.
  • @AllArgsConstructor
    • 선언된 모든 필드를 파라미터로 갖는 생성자를 자동으로 만들어준다.
  • @NoArgsConstructor
    • 파라미터가 아예없는 기본생성자를 자동으로 만들어준다.
  • @Getter
    • 각 필드값을 조회할 수 있는 getter를 자동으로 생성해준다.예를들어 다른 파일에서 Board 객체의 title값을 얻고 싶다면 gettitle()메서드를 정의해서 해당 객체의 title값을 얻어오게 되는데 해당 메서드를 굳이 작성하지 않아도 자동으로 생성해주는 것이다.

변수는 보통 직접 접근 및 변경이 안되도록 private선언자를 통해 지정한다. title이라는 변수를 조회하기 위해서 gettitle()이라는 메서드를 선언하고 title을 리턴하도록 해준다. 이 메서드를 getter라고 부른다.

private String title 
      

          
      
 public String getTitle() { return title } 
  • @ToString
    • 해당 클래스에 선언된 필드들을 모두 출력할 수 있는 toString메서드를 자동으로 생성할 수 있도록 해준다.
  • @Id,@GeneratedValue
    • 해당 엔티티의 주요 키(Primary Key, PK)가 될 값을 지정해주는 것이 @Id이다. @GeneratedValue는 이 PK가 자동으로 1씩 증가하는 형태로 생성될지 등을 결정해주는 어노테이션이다.
  • @ManyToOne
    • 해당 엔티티와 다른 엔티티를 관계짓고 싶을 때 쓰는 어노테이션이다. ManyToOne이라고 부르는 이유는 Writer입장에서 Board는 여러 개가 될 수 있기 때문에 Writer : Board = 1: N관계가 되기 때문이다.



Respository

  • Entity에 의해 생성된 DB에 접근하는 메서드들을 사용하기 위한 인터페이스이다.
  • 위에서 엔티티를 선언함으로써 데이터베이스 구조를 만들었다면 여기에 어떤 값을 넣거나 넣어진 값을 조회하는 등의 CRUD(Create, Read, Update, Delete)를 해야 쓸모가 있는데 이것을 어떻게 할 것인지 정의해주는 계층이라고 생각하면 된다.
  • JPARepository를 상속받도록 함으로써 기본적인 동작이 모두 가능해진다.
  • JPARepository는 어떤 엔티티를 메서드의 대상으로 할지를 다음 키워드로 지정한다.
    • JPARepository<대상으로 지정할 엔티티, 해당 엔티티의 PK타입>

이렇게 extends를 통해서 상속받고 나면 해당 레포지토리의 객체를 이용해서 기본적으로 제공되는 메서드 save(), findAll(), get()등을 사용할 수 있게 된다.

Leave a comment