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());
}
}
728x90
'공부 > Spring Boot' 카테고리의 다른 글
Spring Boot 3.x 버전에서 Spring Security 적용기 (2) | 2024.08.13 |
---|---|
Spring Boot) 회원가입 시 PasswordEncoder 이용해 비밀번호 암호화 (0) | 2024.08.12 |
SpringBoot 3.x 버전에서 RestDocs + SwaggerUI 사용하기 (0) | 2024.08.01 |
OpenAPI 데이터 받아오기 (0) | 2023.09.29 |
JDBC를 이용해서 MySQL 데이터 저장하기 (0) | 2023.09.27 |