일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- thymeleaf
- vuex
- 캐시
- Vue.js
- dependency injection
- Spring
- JPA
- 의존성 주입
- BEAN
- Stateless
- HTTP 메서드
- VUE
- Kotlin
- 프로토타입
- Excel
- Security
- di
- HTTP
- js
- 싱글톤
- Repository
- javascript
- cache
- Java
- Singleton
- DB
- Setter
- vue-cli
- 라이프 사이클
- 로그인
- Today
- Total
jhhan의 블로그
Spring-JPA 활용(2) 본문
오랜 시간동안 까먹고 있다 블로그를 뒤적거리는 중 발견했습니다.
JPA 부분에 대해 이어서 적기로 했더군요
이어 적겠습니다.
저번 글입니다.
https://jhhan009.tistory.com/24
그때 말했던 것처럼 이번에는 JPA를 활용해서 DB에 저장해보겠습니다.
DB 저장하는 부분에 대해서는 제가 만든 코드를 일부 활용해야겠습니다.
(이번 포스팅에는 자세히 언급하지 않을 것이고, 이 부분에 대해 따로 자세히 다루지 않을 것 같습니다.)
저번에 제가 만든 부분은 Report를 저장하기 위해 만든 Report DB입니다.
저번과 비교해서 좀 달라졌을 수도 있지만, 크게 중요하지는 않습니다.
리포트 생성 중 가장 간단한 일일 보고서(Daily Report)로 설명을 진행하겠습니다.
제가 만든 일일 보고서 형식입니다. (되게 간단하고 못생겼습니다.)
ADD를 누르면 추가가 되고, DELETE을 누르면 삭제가 됩니다.
하루동안 한 일에 대해 적은 다음 Submit 버튼을 누르면 보고서가 등록됩니다.
<form th:object="${task}" method="post" action="/report/create/daily">
<div>
<label>Done</label>
<div id="field"></div>
<input type="button" value="Add" onclick="add()"/>
<input type="button" value="Delete" onclick="remove()" />
</div><br/>
<button class="btn btn-primary" type="submit">Submit</button>
</form>
form을 사용해서 넘겼습니다.(자세한 설명은 생략)
1. 리포트를 저장하는 부분입니다.
//Report Save
Report report = new Report();
report.setUsername(auth.getName());
report.setReportType("Daily");
report.setSimpleDate(nowDate);
report.setWriteDate(now);
report.setUpdatedTime(now);
report.setState("Waiting");
report.setReportTitle(nowDate + "_Daily_Report");
System.out.println(report);
reportRepository.save(report);
Report를 새로 정의한 후 리포트에 들어갈 부분을 setter를 통해 값을 넣어줍니다.
여기서 이상한 점은 제일 중요한 reportId 부분을 setter를 통해 값을 넣어주지 않은 점입니다.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long reportId;
Report 클래스를 정의하면서 이렇게 정의를 했는데,
@GeneratedValue부분에서 알아서 지정하도록 설정했기 때문에 굳이 reportId를 설정하지 않아도 됩니다.
그리고 설정이 잘 되었는데 확인하기 위해 report를 println을 통해서 확인을 했습니다. 확인 안하셔도 됩니다.
reportRepository.save(report);
이 부분이 DB에 저장하는 부분입니다.
저번 포스트에서 ReportRepository를 만들었기 때문에
@Autowired
ReportRepository reportRepository;
이렇게 정의를 하는 것이 가능합니다.
그리고 reportRepository.save(report); 를 사용하시면 Report가 정상적으로 저장이 될 것입니다.
만약 오류가 뜬다면
- reportId 부분 설정을 잘못하셨거나
- Report 클래스에서 따로 추가하거나 삭제한 부분에 대해 setter를 통해 값을 지정해 주셔야 할 것입니다.
2. Report를 DB에서 삭제하는 방법에 대해서도 알아보겠습니다.
Report r = reportRepository.findByReportId(r_id);
reportRepository.delete(r);
여기서 findByReportId는 기본적으로 제공됩니다.
(reportId처럼 Primary Key를 제대로 설정하셨다면 잘 뜰 것입니다.)
그럼 첫번째 줄에서는 reportId를 통해 Report를 하나 가져올 것입니다.
(Primary Key를 통해 검색했기 때문에 단 한 개 혹은 null 값이 된다는 것은 알고 계시겠죠 ㅎㅎ)
두번째 줄에서는 찾은 녀석을 삭제해줍니다.
삭제 역시 간단합니다. - 삭제할 것을 잘 찾기만 한다면 쉽습니다.
3. Report를 수정하는 방법도 쉽습니다.
Report r = reportRepository.findByReportId(r_id);
// r.set~
reportRepository.save(r);
역시 해당 리포트를 검색한 후 setter를 통해 원하시는 값으로 변경합니다.
그리고 save()를 통해 다시 저장하시면 됩니다.
그러면 수정이 완료됩니다.
이렇게 JPA를 통해 DB에 저장하고, 수정하고, 삭제하는 방법에 대해 알아봤습니다.
(대단한 건 아닌데 마치 대단한 것처럼 제가 작성한 것 같군요.)
아마 이 방법 말고 다른 방법이 있을 것입니다.
그래도 이 방법이 많이 편하다고 생각합니다.
그럼 마치겠습니다.
'Spring' 카테고리의 다른 글
Spring - static (0) | 2020.09.06 |
---|---|
Spring - textarea 관련 (0) | 2020.06.23 |
Spring - JPA 활용 (0) | 2020.03.25 |
Spring_Security 응용 - 로그인 페이지 만들기(4)_회원가입 (0) | 2020.03.22 |
Spring ThymeLeaf(타임리프)(3)_짧게 (0) | 2020.03.17 |