Spring/인프런_JPA
[Spring]자바 ORM 표준 JPA 프로그래밍 - JPA 시작하기
빙응이
2024. 2. 13. 16:30

📝앤티티 매니저 팩토리를 이용한 JPA 사용해보기
사용 주의사항
- 엔티티 매니저 팩토리는 하나만을 생성해서 애플리케이션 전체에서 공유해야한다.
- 엔티티 매니저는 쓰레드간에 공유를 하지 않는다. 사용하고 버려야 한다.
- JPA의 모든 데이터 변경은 트랜잭션 안에서 실행된다.
테이블(엔티티) 정의하기
@Entity
@Getter
@Setter
public class Member {
//JPA에서 기본키는 따로 지정해줘야 한다.
@Id
private Long id;
private String name;
}
CRUD 실습해보기
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
//앤티티 매니저
EntityManager em = emf.createEntityManager();
//code
EntityTransaction tx = em.getTransaction();
tx.begin();
//저장
try {
Member member = new Member();
member.setId(1L);
member.setName("helloA");
em.persist(member);
tx.commit();
}catch (Exception e){
tx.rollback();
}finally {
em.close();
}
//조회
try {
Member findMember = em.find(Member.class, 1L);
System.out.println("findMember.id = "+ findMember.getId());
System.out.println("findMember.name =" + findMember.getName());
tx.commit();
}catch (Exception e){
tx.rollback();
}finally {
em.close();
}
//삭제
try {
Member findMember = em.find(Member.class, 1L);
em.remove(findMember);
tx.commit();
}catch (Exception e){
tx.rollback();
}finally {
em.close();
}
//수정
try {
Member findMember = em.find(Member.class, 1L);
findMember.setName("HelloJpa");
tx.commit();
}catch (Exception e){
tx.rollback();
}finally {
em.close();
}
하나하나씩 중요 문법을 살펴보자
엔티티매니저 관련
- EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
- 엔티티 매니저 팩토리를 정의 사용 이유는 엔티티매니저는 한 작업을 수행하고 버리기 때문이다.
- EntityManager em = emf.createEntityManager();
- 엔티티 매니저 정의
CRUD 관련
- em.persost(member) : 데이터베이스에 저장
- em.find(member.class, 1L) : 기본키가 1L인 것을 찾는다.
- em.remove(member) : 해당 데이터 삭제
- em.setName() : 이것은 객체처럼 다루는 JPA 특성상 따로 저장하지 않고 바꾸기만 해도 적용된다.
트랜잭션 관련
- EntityTransaction tx = em.getTransaction()
- JPA는 모두 트랜잭션 안에서 적용되므로 트랜잭션을 정의한다.
- tx.begin() : 트랜잭션을 시작하는 부분
- tx.commit() : 데이터베이스에 결과를 반영한다.
- tx.rollback() : 작업 전 상태로 롤백
📝JPQL
JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공한다.
SQL과 문법이 유사하며, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원한다.
가장 큰 차이점은 JPQL은 엔티티 객체를 대상으로 쿼리를 짠다는 것
특징은 다음과 같다.
- 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리
- SQL을 추상화해서 특정 데이터베이스 SQL에 의존 X
- JPQL을 한마디로 정의하면 객체 지향 SQL