jhhan의 블로그

Spring - JPA 활용 본문

Spring

Spring - JPA 활용

jhhan000 2020. 3. 25. 15:11

이번에는 JPA를 활용하여 DB에 좀 더 간단하게 접근할 수 있는 법에 대해 알아보겠습니다.

 

JPA를 사용하여 DB를 직접 손대지 않고 테이블 관리를 할 수 있습니다.

저는 MariaDB를 활용하여 진행하고 있습니다.

MariaDB 연결과 관련해서는 링크를 걸어놓겠습니다.

https://jhhan009.tistory.com/20?category=761889

 

JPA를 사용하기 위해서 필요한 것이 있습니다.

의존성을 추가해야하는데 JPA와 lombok를 추가할 것입니다.

프로젝트를 새로 만드신다면 JPA와 lombok을 찾아서 추가하시면 되시고

프로젝트를 이미 만드셨다면 pom.xml에 다음과 같이 추가합니다.

  • JPA와 lombok을 저렇게 추가하면 사용할 수 있게 됩니다.
  • lombok에 대해서는... 제가 아직 모르는게 많이 있어서 자세히는 설명을 못드립니다.
  • 다만 getter와 setter를 설정하지 않아도 편하게 사용할 수 있는 장점이 있습니다.
  • 하지만 무분별한 사용은 오히려 프로그램 성능을 저하시킨다고 합니다. lombok을 사용하지 않으셔도 됩니다.

 

저는 전에 사용하던 프로젝트를 사용하여 진행하겠습니다.

먼저 프로젝트 구조를 보겠습니다.

프로젝트 구조의 일부분

 

** 제가 만든 스프링 프로젝트의 구조 중 일부입니다.

** 여기서 Entity 부분을 다뤄보겠습니다.

** Report와 Task라는 테이블을 만들어서 진행할 것입니다.

** Report는 제출할 보고서를 의미합니다. 

** Task는 Report에 적을 임무를 의미합니다.

** 그래서 Report에는 하나의 Task가 있을 수도 있고 여러 개의 Task가 있을 수도 있습니다. Report 테이블과 Task 테이블은 1:N관계일 것입니다. 

먼저 Report 클래스를 만들고 다음과 같이 작성합니다.(이번엔 그림으로 해서 복붙이 안됩니다..)

Report 클래스 내용

  • JPA를 사용할 때는 많은 애노테이션이 사용됩니다.
  • 제가 아는 만큼 설명드리겠습니다.
  • @Entity : 테이블이라고 인식하게 합니다.
  • @Table : 괄호를 사용해서 DB에 다른 이름으로 저장할 수 있게 합니다. (-> 저는 reportRtable로 했는데 이게 DB에 저장될 때는 report_rtable로 저장이 됩니다. 참고하세요.)
  • @Id : primary key라는 뜻을 갖게 합니다. 이 애노테이션을 가진 변수가 기본키가 됩니다.
  • @GeneratedValue : key가 생성되는 법칙을 정합니다. auto_increment에 해당하는 부분입니다.
    • AUTO
    • IDENTITY
    • SEQUENECE
    • TABLE
    • 저는 주로 AUTO 혹은 IDENTITY를 사용합니다.
  • @Data : 이것만큼은 확실하지 않은데, getter와 setter를 자동으로 생성해줍니다. 이 애노테이션이 없다면 getter와 setter를 따로 작성하셔야 합니다.
  • @DateTimeFormat : 날짜가 저장되는 방식에 대해 pattern을 지정합니다.
  • @CreationTimestamp : DB에 데이터 insert시 자동으로 날짜를 설정하게 합니다.
  • @UpdateTimestamp : update 할 때에 자동으로 날짜 설정을 하게 합니다.
  • @Column : 컬럼을 조작할 수 있게 합니다. 이름을 바꾸게 할 수도 있는데 저는 updatable=false로 지정해서 insert만 가능하고 update는 못하게 했습니다.

 

  • 나머지 컬럼들에 대해서 간략하게 설명드리겠습니다.
  • reportId : 리포트의 번호입니다. 기본키가 됩니다.
  • username : 리포트를 쓴 사람입니다.
  • reportType : 리포트 타입입니다. 일일, 주간, 월간, 연간 을 구분하기 위해 사용합니다.
  • simpleDate : 간단한 날짜를 저장하기 위해 만들었습니다. ex) 20200101
  • writeDate : 리포트가 작성된 날짜를 저장합니다.
  • updatedTime : 리포트가 업데이트 되는 날짜를 저장합니다.
  • state : 리포트의 상태입니다. 요청, 대기, 승인, 반송 을 구분하기 위해 사용합니다.
  • reportTitle : 리포트 제목입니다.

 

이렇게 만든다음 Repository를 만듭니다.  Repository는 Interface로 만듭니다.

  • 이렇게 작성합니다.
  • JpaRepository<Report, Long> : Report는 클래스 이름을 적어주시면 되고, Long은 @Id로 설정한 변수의 자료형을 적으면 됩니다. int로 설정한 분은 Integer로 적으셔야 합니다.
  • 이후 여기다 원하는 DB자료를 찾게 할 수 있는 메서드 작성을 할 수 있습니다.

 

이후 프로젝트를 실행하시면 DB에 테이블이 만들어지게 됩니다.

그러면 report_rtable이 만들어진 것을 확인하실 수 있습니다.

 

여기다 이어서 JPA를 사용해 DB에 저장하는 법에 대해서도 알아보겠습니다.