JPA
- 기존의 반복적인 코드와 기본적인 SQL 도 JPA 가 직접 만들어서 실행
- SQL과 데이터 중심의 설계에서 객체 중심의 설계로 전환
- 개발 생산성 증가
- Java 진영의 표준 인터페이스
- JPA는 인터페이스만 제공
- JPA 인터페이스의 구현체
ORM Object Relation Mapping
- 객체와 RDBMS의 테이블을 매핑
- 매핑은 어노테이션으로 작동
@Entity 어노테이션
@Entity
public class Member {}
@Id 어노테이션
@Id
private Long id;
@GenerateValue(strategy = GenerationType.IDENTITY)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
Identity 전략
- 쿼리에 id 값을 넣는게 아니라 DB 에 값을 넣으면 DB 가 자동으로 id 값 생성
@Column(name=””)
@Column(name="level", nullable = false)
private String level = "0";
EntityManager
public class JpaMemberRepository implements MemberRepository{
private final EntityManager em;
public JpaMemberRepository(EntityManager em) {
this.em = em;
}
- 스프링 부트가 자동으로 DB와 연결된 EntityManager 생성
- 만들어진 EntityManager를 주입 받는다.
JPQL 쿼리 언어
@Override
public List<Member> findAll() {
return em.createQuery("select m from Member m", Member.class)
.getResultList();
}
- 테이블 대상이 아닌 엔티티 (객체) 대상으로 날리는 쿼리
JPA 주의점
- 항상 트랜잭션이 있어야 한다.
- 모든 데이터 변경이 트랜잭션안에서 실행 되어야 한다.
SpringConfig
@Configuration
public class SpringConfig {
private EntityManager em;
@Autowired
public SpringConfig(EntityManager em) {
this.em = em;
}
@Bean
public MemberService memberService() { return new MemberService(memberRepository()); }
@Bean
public MemberRepository memberRepository() {
return new JpaMemberRepository(em);
}
}