JPA란?
- JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준
- JPA가 제공하는 API를 사용하며, 개발자가 SQL를 작성하지 않아도 된다.
- JPA가 개발자 대신 적절한 SQL를 생성해준다. (JPQL)
- 객체(Entity)를 관계형 DB와 자동으로 Mapping 해준다. (ORN)
ORM
- Object-Relational Mapping의 줄임말.
- 객체와 관계형 DB를 매핑한다는 뜻.
- ORM 프레임워크를 사용하면 객체와 DB와의 매핑을 통해 적절한 SQL를 생성하여 DB에 객체를 저장해준다.
의존성 추가
maven repository 주소 : https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.7.2</version>
</dependency>
Entity
JPA에서 Entity라는 것은 데이터베이스에 저장하기 위해서 유저가 정의한 클래스입니다. 테이블과 Mapping이 되는 구조를 가집니다.
@Entity
@Table(name="member")
@Getter @Setter
public class Member {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
@Column
private String name;
@Column
private int age;
public Member() {}
}
Entity에는 여러가지 어노테이션을 통해 데이터베이스와 Mapping 설정등을 추가할 수 있습니다. 자세한 설명은 다음 글에서 포스팅하겠습니다.
Table To Entity
- 이클립스에서 프로젝트 > 마우스 우클릭
만들고자 하는 DB의 Connection을 연결하여 원하는 테이블을 클릭하여 간편히 Entity를 만들 수 있습니다.
Repository
Entity 클래스를 구성했다면 쿼리를 실행하기 위해서 Repository 인터페이스를 만들어야 합니다.
public interface MemberRepository extends JpaRepository<Member, Integer> {
}
JpaRepository를 상속받은 Interface를 구현하면 기본적인 쿼리들은 바로 사용할 수 있습니다.
Application 작성
@SpringBootTest
public class JpaTest {
@Autowired private MemberRepository memberRepository;
@Test
public void test() {
// 전체 조회
memberRepository.findAll();
// id로 조회
memberRepository.findById(1);
// 저장
Member member = new Member();
member.setName("개발자");
member.setAge(20);
memberRepository.save(member);
}
}
만들었던 MemberRepository를 주입받고, findAll()등과 같은 메소드를 통해 간단한 쿼리를 바로 호출하여 사용할 수 있습니다. MemberRepository를 구현할 때 상속 받은 JpaRepository를 보게 되면, 우리가 호출할 수 있는 메소드들을 볼 수 있습니다.
'Programming > JPA' 카테고리의 다른 글
[Spring Data JPA] Query를 사용하는 여러가지 방법 (0) | 2022.08.11 |
---|---|
[Spring Data JPA] FetchType - 즉시 로딩(EAGER)과 지연 로딩(LAZY) (0) | 2022.08.04 |
[Spring Data JPA] 양방향 순환참조 문제 및 해결방법 (0) | 2022.08.03 |
[Spring Data JPA] JPA 연관관계 매핑(JOIN) (0) | 2022.08.02 |
[Spring Data JPA] JPA 주요 어노테이션(Annotation) (0) | 2022.07.31 |