일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- javascript
- Java
- Stateless
- vue-cli
- 프로토타입
- Kotlin
- Spring
- HTTP
- HTTP 메서드
- vuex
- Singleton
- Security
- js
- 로그인
- dependency injection
- DB
- 의존성 주입
- thymeleaf
- BEAN
- VUE
- 캐시
- 라이프 사이클
- 싱글톤
- Excel
- Setter
- JPA
- Vue.js
- cache
- di
- Repository
- Today
- Total
jhhan의 블로그
Spring - JPA 활용 본문
이번에는 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 클래스를 만들고 다음과 같이 작성합니다.(이번엔 그림으로 해서 복붙이 안됩니다..)
- 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에 저장하는 법에 대해서도 알아보겠습니다.
'Spring' 카테고리의 다른 글
Spring - textarea 관련 (0) | 2020.06.23 |
---|---|
Spring-JPA 활용(2) (0) | 2020.06.09 |
Spring_Security 응용 - 로그인 페이지 만들기(4)_회원가입 (0) | 2020.03.22 |
Spring ThymeLeaf(타임리프)(3)_짧게 (0) | 2020.03.17 |
Spring_Security 응용 - 로그인 페이지 만들기(3) _ DB연결 (0) | 2020.03.11 |