본문 바로가기
공부/Spring

JPA를 이용해서 MySQL에 데이터 저장하기

by son_i 2023. 9. 27.
728x90
  • JPA (Java Persistent API)
    • ORM의 한 종류
    • 자바에서 ORM을 많이 쓰니까 아예 자바전용 ORM을 JPA로 만듦.
    • → 자바에서 ORM 기능을 쓰기 위한 인터페이슬 모아둔 것.
    • 자바의 객체와 DB 테이블만 연결해주면 쿼리 자동 생성.
    • JPA로 데이터 저장하기

 

1. build.gradle dependencies에 JPA라이브러리 추가 (사용할 db라이브러리도)

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

 

2. application.properties에 DB 접속정보 설정

spring.jpa.show-sql=true //내부적으로 작성된 쿼리를 콘솔에 출력할지 여부
spring.jpa.database=mysql //jpa에게 사용할 DB알려줌.

 

3. Memo 클래스에 @Entity 붙이기 - JPA 사용시엔 꼭 @Entity 붙임 !!!!!

  • Entity(클래스) 여러 개를 하나의 테이블에 매핑하는 것도 가능.

ex) Entity1은 memo테이블의 id 컬럼만 사용, Entity2는 memo테이블의 id, text 컬럼 사용.

  • 테이블명과 클래스 이름 다를 때 @Entity(name=”Memo”)로 명시 같으면 클래스 이름Memo일 때 Memo 테이블을 찾음.
package zerobase.weather.domain;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "memo")
public class Memo {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    private String text;
}

 

4. JPAMemoRepository 구현

: repository 패키지 interface로 만들고 JpaRepository 상속. @Repository 어노테이션 붙이기.

package zerobase.weather.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import zerobase.weather.domain.Memo;

@Repository
public interface JpaMemoRepository extends JpaRepository<Memo, Integer> {
			//Memo는 Repository가 사용할 Entity
			//Integer는 그 Entity의 PK타입.
}

 

5. 테스트 코드 작성

package zerobase.weather.repository;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import zerobase.weather.domain.Memo;

import java.util.List;
import java.util.Optional;

import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
@Transactional
class JpaMemoRepositoryTest {

    @Autowired
    JpaMemoRepository jpaMemoRepository;

    @Test
    void insertMemoTest() {
        //given
        Memo newMemo = new Memo(2, "hi");

        //when
        jpaMemoRepository.save(newMemo);

        //then
        List<Memo> memoList = jpaMemoRepository.findAll();
        assertTrue(memoList.size() > 0);

     }

    @Test
    void findByIdTest() {
        //given
        Memo newMemo = new Memo(190, "나는 소은");

        //when
        Memo memo = jpaMemoRepository.save(newMemo);
        System.out.println(memo.getId());
        //then
        Optional<Memo> result = jpaMemoRepository.findById(memo.getId());
        assertEquals("나는 소은", result.get().getText());
    }
}

'공부 > Spring' 카테고리의 다른 글

OpenAPI 데이터 받아오기  (0) 2023.09.29
JDBC를 이용해서 MySQL 데이터 저장하기  (0) 2023.09.27