[SpringBoot/Java/07.JPA]

안지은·2023년 2월 6일
0

💡 JPA

JPA는 기존의 반복 코드 제거는 물론, 기본적인 SQL도 JPA가 직접 만들어서 실행한다. JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환할 수 있다.

build.gradle에 JPA, h2 데이터베이스 관련 라이브러리 추가

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

resources/application.properties에 JPA 설정 추가

spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver

spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
  • spring.jpa.hibernate.ddl-auto=none : jpa를 사용하면 객체를 보고 table을 자동 생성하는 것을 막음. (지금은 만들어진 table을 사용할 것이다.)

JPA 엔티티 매핑

Member.java

package hello.hellospring.domain;

import jakarta.persistence.*;

@Entity
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    //@Column(name = "username")
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  • @Entity : JPA가 관리하는 엔티티라는 의미이다.
  • @Id : table의 Primary key를 매핑해준다.
  • @GeneratedValue(strategy = GenerationType.IDENTITY) : db에 값을 넣으면 id를 자동 생성한다.
  • @Column(name = "username") : db에서 column명이 username인 것과 name 필드가 매핑

JPA 회원 리포지토리

  • EntityManager : db와의 통신을 처리.

  • em.persist() : 영구저장

  • em.find(조회할 타입, 식별자인 PK) : PK를 보고 객체를 조회해줌.

  • em.createQuery(쿼리, 조회할 타입)

  • select m from Member m : jpql이라는 쿼리 언어. table 대상이 아니라
    객체를 대상으로 쿼리를 날림. 이 쿼리문은 객체 자체를 조회하는 것.

  • findByName이나 findAll 같은 PK 기반이 아닌 것들은 jpql을 작성해줘야 한다.

  • JPA는 저장, 조회, 삭제, 업데이트는 sql을 짤 필요없다.

14:47

profile
공부 기록용

0개의 댓글