0. 간단한 Member 테이블
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class Member {
@Id
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;
}
}
자바 17버전을 사용해서 jakarta를 사용, @Entity: 데이터베이스 테이블
@Id로 PK값을 정해줌
1. 회원 등록
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
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();
}
emf.close();
}
}
try - catch를 이용해서 꼭 rollback과 EntityManager를 닫아주기 !!
Transaction으로 쿼리를 날려주어야 DB에 반영됨.
2. Member 조회 /수정
// Member 조회
Member findMember = em.find(Member.class,1L);
System.out.println("findMember.id = " + findMember.getId());
System.out.println("findMember.name = " + findMember.getName());
try {
// Member 수정
Member findMember = em.find(Member.class,1L);
findMember.setName("HelloJPA");
tx.commit();
} catch (Exception e){
tx.rollback();
} finally {
em.close();
}
수정같은 경우에는 em.persist()를 하지 않아도 됨.
3. Member 삭제
try {
// Member 삭제
Member deleteMember = em.find(Member.class,1L);
em.remove(deleteMember);
tx.commit();
} catch (Exception e){
tx.rollback();
} finally {
em.close();
}
4. 전체 Member 데이터 조회(JPQL)
try {
// 전체 Member 조회
List<Member> result = em.createQuery("select m from Member as m", Member.class).getResultList();
for (Member member : result) {
System.out.println("member.name = " + member.getName());
}
tx.commit();
} catch (Exception e){
tx.rollback();
} finally {
em.close();
}
- JPA를 사용하면 객체를 중심으로 개발
- 문제는 검색 쿼리
- 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색
- 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능
- 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요
- JPA는 JPQL이라는 객체 지향 쿼리 언어 제공, SQL 문법과 유사(SELECTM FROM, WHERE, GROUP BY, HAVING, JOIN) 지원
5. 주의 !!
- EntityManagerFactory는 하나만 생성해서 애플리케이션 전체에서 공유
- EntityManager는 쓰레드간 공유X(사용 후 버려야함.)
- JPA의 모든 데이터 변경은 트랜잭션 안에서 !!
'JPA' 카테고리의 다른 글
[JPA] 기본 매핑 - 예제 Entity (1) | 2024.01.09 |
---|---|
[JPA] 필드와 컬럼 매핑 (1) | 2024.01.08 |
[JPA] 객체와 테이블 매핑 (0) | 2024.01.08 |
[JPA] 영속성 컨텍스트, 플러시, 준영속 (0) | 2024.01.07 |
JPA (0) | 2024.01.05 |