jhhan의 블로그

Spring-JPA 활용(2) 본문

Spring

Spring-JPA 활용(2)

jhhan000 2020. 6. 9. 22:34

오랜 시간동안 까먹고 있다 블로그를 뒤적거리는 중 발견했습니다.

JPA 부분에 대해 이어서 적기로 했더군요

이어 적겠습니다.

 

저번 글입니다.

https://jhhan009.tistory.com/24

 

그때 말했던 것처럼 이번에는 JPA를 활용해서 DB에 저장해보겠습니다.

DB 저장하는 부분에 대해서는 제가 만든 코드를 일부 활용해야겠습니다.
(이번 포스팅에는 자세히 언급하지 않을 것이고, 이 부분에 대해 따로 자세히 다루지 않을 것 같습니다.)

 

저번에 제가 만든 부분은 Report를 저장하기 위해 만든 Report DB입니다.

report_table

저번과 비교해서 좀 달라졌을 수도 있지만, 크게 중요하지는 않습니다.

 

리포트 생성 중 가장 간단한 일일 보고서(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가 정상적으로 저장이 될 것입니다.

만약 오류가 뜬다면

  1. reportId 부분 설정을 잘못하셨거나
  2. 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