스프링부트

스프링부트 7주차

조강학 2024. 8. 16. 20:46

2-05 리포지토리로 데이터베이스 관리하기

 

앞서 수정한 테이블의 데이터를 조회 ,저장, 수정 , 삭제를 위해 데이터베이스와 연동하는 jpa 리포지터리가 필요하다

 

리포지토리 생성 방법:

com.mysite.sbb 패키지 선택 -> 우클릭 -> new ->interface 클릭해 QuestionRepository 인터페이스 생성

생성한 인터페이스를 리포지토리로 만들기 위해 JpaRepository (jpa가 제공하는 인터페이스중 하나로 cu-rud 작업을 처리하는 메소드를 내장하고 있어 편리하게 이용 가능하다)인터페이스 상속이 필요함.

 

 JpaRepository<Question, Integer>는 question 엔티티로 리퍼지토리를 생성한다는 의미임

엔티티의 기본키가 intteger 임을 이와 같이 추가로 지정해주는 활동이 필요함

 

CRUD는 데이터 처리의 기본 기능을 의미 create,read,update,delete의 줄임말

 

마찬가지로 answer 리퍼지토리의 인터페이스를 생성해주면 question과 answer 리퍼지토리를 활용하여 테이블속에 데이터를 저장, 조회, 수정 삭제의 활동이 가능하다

 

원래 리퍼지토리를 이용하여 데이터를 저장하려면 질문을 등록하는 화면과 컨트롤러 서비스파일 등이 필요하지만, Junit을 사용하면 리퍼지토리만 개별적으로 실행해ㅐ 테스트가 가능하다!

junit은 자바의 테스트 프레임워크로 작성한 코드를 테스트해볼 때 사용하는 자바의 프레임워크이다

 

testImplementation 'org.junit.jupiter:junit-jupiter' testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

junit의 설치를 위해서는 build.gradle 파일에 이 내용을 추가해주면 된다 

그 다음 그래들을 리프레시 해주면 junit 설치가 완료된다

 

이제 테이브에 데이터를 생성하고 저장할 준비가 되었다. 먼저 src/test/java 디렉터리의 com.mysite.sbb ㅠㅐ키지 속 sbbapplicationtest.java 파일을 열어 수정다

package com.mysite.sbb;

import java.time.LocalDateTime;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;


@SpringBootTest
class SbbApplicationTests {

    @Autowired
    private QuestionRepository questionRepository;

    @Test
    void testJpa() {        
        Question q1 = new Question();
        q1.setSubject("sbb가 무엇인가요?");
        q1.setContent("sbb에 대해서 알고 싶습니다.");
        q1.setCreateDate(LocalDateTime.now());
        this.questionRepository.save(q1);  // 첫번째 질문 저장

        Question q2 = new Question();
        q2.setSubject("스프링부트 모델 질문입니다.");
        q2.setContent("id는 자동으로 생성되나요?");
        q2.setCreateDate(LocalDateTime.now());
        this.questionRepository.save(q2);  // 두번째 질문 저장
    }
}

 @springboot 이너테이션은 sbb어플리케이션테스트 클래스가 스프링부트의 테스트 클래스임을 의미한다

그리고 질문의 엔티티 데이터를 생성할때 리퍼지토리가 필요하므로 @autowired (스프링의 어노테이션)애너테리션을 사용해 의존성 주입의 기능을 사용하여 객체를 주입할 수 있다 

 

@test 애너테이션은 현제 메서드가 테스트 메서드임을 의미한다

 

junit을 실행하면 @test 애너테이션이 붙은 testjpa가 실행된다!

 

 

test jpa의 매서드 내용을 확인해보면 

q1,q2 라는질문 엔티티 객체를 생성하고 질문 레퍼지토리를 사용하여save  그 값을 데이터베이스에 저장한다 

 

실행을 하기위한 작동

 

데이터 조회는 findall 함수를 통해 조회 가능하다

 

assertEquals 함수를 이용하며 값이 내가 원하는 값ㄷ과 같은지를 확인 할 수 있다

 

find by id 는 아이디를 통해 조회하는 함수  

find by suject 는 서브젝트를 통해 확인하는 함수

 

 

SQL 연산자리포지터리의 메서드 예시설명

And findBySubjectAndContent(String subject, String content) Subject, Content 열과 일치하는 데이터를 조회
Or findBySubjectOrContent(String subject, String content) Subject열 또는 Content 열과 일치하는 데이터를 조회
Between findByCreateDateBetween(LocalDateTime fromDate, LocalDateTime toDate) CreateDate 열의 데이터 중 정해진 범위 내에 있는 데이터를 조회
LessThan findByIdLessThan(Integer id) Id 열에서 조건보다 작은 데이터를 조회
GreaterThanEqual findByIdGreaterThanEqual(Integer id) Id 열에서 조건보다 크거나 같은 데이터를 조회
Like findBySubjectLike(String subject) Subject 열에서 문자열 ‘subject’와 같은 문자열을 포함한 데이터를 조회
In findBySubjectIn(String[] subjects) Subject 열의 데이터가 주어진 배열에 포함되는 데이터만 조회
OrderBy findBySubjectOrderByCreateDateAsc(String subject) Subject 열 중 조건에 일치하는 데이터를 조회하여 CreateDate 열을 오름차순으로 정렬하여 반환

 

delete(q) 함수를 활용하면 삭제도 가능하다..

 

 

 

 

'스프링부트' 카테고리의 다른 글

스프링부트 여름방학 9주차  (0) 2024.08.30
스프링부트 8주차  (1) 2024.08.21
여름방학 5주차 스프링 부트  (0) 2024.08.04