JPA
➡️ 반복코드는 물론이고 기본적인 SQL도 JPA가 직접 만들어서 실행
➡️ SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임 전환
➡️ 개발 생산성을 크게 증가시킴
➡️ jpa dependencies 추가
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

➡️ application.properties에 jpa관련 설정 추가
🔸jpa가 날리는 sql을 볼 수 있음
spring.jpa.show-sql=true
🔸자동 테이블 생성 기능은 이미 테이블을 만들었기 때문에 none으로 끄고 시작
spring.jpa.hibernate.ddl-auto=none

➡️JPA는 ORM 표준 ( Object Relational Mapping )
🔸어노테이션으로 엔티티, PK등을 맵핑


package hello.hellospring.domain;
import jakarta.persistence.*;
@Entity // jpa가 관리하는 엔티티로 만들어주기
public class Member {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
// PK값으로 지정한 후 해당 값을 지정하는 방식이 아닌 DB에서 값을 하나씩 올리면서 생성해 줌 > IDENTITY로 설정
private Long id; //시스템에서 부여할 아이디
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;
}
}
➡️ jpa 리포지토리 추가 >> 기본적인 쿼리는 SQL 사용할 필요x / 기본 메서드에 존재
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import jakarta.persistence.EntityManager;
import java.util.List;
import java.util.Optional;
public class JpaMemberRepository implements MemberRepository {
private final EntityManager em;
// 스프링부트가 자동으로 EntityManager 생성 > injection 받아서 사용 >> jpa를 사용하기 위한 기본 장치
public JpaMemberRepository(EntityManager em) {
this.em = em;
}
@Override
public Member save(Member member) {
em.persist(member); // 쿼리 생성 후 DB에 넣고 setId 까지 모두 실행
return member;
}
@Override
public Optional<Member> findById(Long id) {
Member member = em.find(Member.class, id); // find( 조회 타입, 식별자pk ) >> 조회
return Optional.ofNullable(member);
}
@Override
public Optional<Member> findByName(String name) {
List<Member> result = em.createQuery("select m from Member m where m.name = :name", Member.class)
.setParameter("name", name)
.getResultList();
return result.stream().findAny();
}
@Override
public List<Member> findAll() {
return em.createQuery("select m from Member m", Member.class)
.getResultList();
}
}
➡️ Service 계층에 트랜잭션 생성

➡️ SpringConfig를 JpaMemberRepository로 갈아끼워주고 EntityManager 맵핑해서 실행

➡️ 테스트 실행해보면(join 메서드 실행) Hibernate 구현체가 쿼리를 생성한 것 확인 가능

'프로그래밍 > - Spring' 카테고리의 다른 글
| [ AOP ] AOP가 필요한 상황 (0) | 2025.02.13 |
|---|---|
| [ 스프링 DB 접근 기술 ] 스프링 데이터 JPA (0) | 2025.02.13 |
| [ 스프링 DB 접근 기술 ] 스프링 통합 테스트 / 스프링 JdbcTemplate (0) | 2025.02.11 |
| [ 스프링 DB 접근 기술 ] H2 데이터베이스 설치 / 순수JDBC (0) | 2025.02.06 |
| [ 회원 관리 예제 - 웹 MVC 개발 ] 회원 웹기능 - 홈 화면 추가 / 등록 / 조회 (1) | 2025.02.04 |