728x90
반응형
JPA 객체 맵핑하는 법을 알아보자.
Member Class 생성후 맵핑하기
- @Entity: 어노테이션을 선언해 주면 JPA 가 해당 어노테이션을보고 인식한다.
- @Table: 어노테이션을 이용하여 객체를 저장할 테이블 명을 따로 지정해줄수 있다.
- 기본값은 클래스 명이다. - @Id 로 PK 를 설정한다.
- @Column 으로 컬럼 이름을 지정해 줄수 있다.
Member Class
package hellojpa;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity // 꼭넣어야 한다. // JPA가 로딩 될때 해당 어노테이션을 보고 인식한다.
//@Table(name = "USER") // 테이블명 지정
public class Member {
@Id //PK 설정
private Long id;
// 컬럼이름을 지정해준다.
// @Column(name = "usrname")
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 사용해보기
- persistence.xml 의 정의된 설정 정보로 EntityManagerFactory 를 생성한다.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
- EntityManagerFactory 에서 EntityManager 를 꺼내온다.
EntityManager em = emf.createEntityManager();
- EntityManager 에서 트랜잭션을 가져오고 Try Catch 문안에서 수행해준다.
트랜잭션을 가져오는 이유는 반드시 JPA의 데이터 변경연산은 트랜잭션 안에서 수행되어야 하기 때문이다.
EntityTransaction tx = em.getTransaction(); tx.begin(); try { // JPA CRUD 로직 구현 tx.commit(); // commit 을 해야 DB에 반영됨 } catch (Exception e) { tx.rollback(); // 반드시 에러 발생시 롤백 } finally { em.close(); // Entity manager 종료 } emf.close(); // Entity Manager Factory 종료
JPA CRUD 구현하기
- 저장: 저장은 EntityManager 의 persist 함수를 호출하여 객체를 넘겨주면 된다.
Member member = new Member(); member.setId(1L); member.setName("Hello"); em.persist(member);
- 조회: 조회는 EntityManager의 find 함수를 호출하여 조회 한다.
Member findMember = em.find(Member.class, 1L); System.out.println("memberId: " + findMember.getId()); System.out.println("memberName: "+findMember.getName());
- 삭제: 삭제는 EntityManager의 remove 함수를 호출한다.
Member findMember = em.find(Member.class, 1L); em.remove(findMember);
- 수정: 수정은 영속성 인 객체를 꺼내와서 setter로 값만 바꾸면 알아서 update가 된다.
Member findMember = em.find(Member.class, 1L); findMember.setName("Hi");
구현
package hellojpa;
import javax.persistence.*;
import java.util.List;
public class JpaMain {
public static void main(String[] args) {
// persistence.xml 의 persistence-unit name="hello" 를 넘긴다.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
// 매니저를 꺼내온다.
EntityManager em = emf.createEntityManager();
// 트랜잭션 얻어오고 실행한다.
// JPA 는 트랜잭션 안에서 수행되어야 한다.
EntityTransaction tx = em.getTransaction();
tx.begin();
// exception 처리를 위해 try catch 문을 반드시 사용해야된다.
try {
// code 작성
// 저장로직
/*
Member member = new Member();
member.setId(1L);
member.setName("Hello");
em.persist(member);
*/
// 찾기로직
/*
Member findMember = em.find(Member.class, 1L);
System.out.println("memberId: " + findMember.getId());
System.out.println("memberName: "+findMember.getName());
*/
// 삭제로직
/*
Member findMember = em.find(Member.class, 1L);
em.remove(findMember);
*/
// 수정로직
// 수정 로직은 영속성 객체를 가져왔기 때문에
// 따로 em을 이용하지 않고 변경 가능하다.
// commit 직전에 update 쿼리를 생성후
// commit 한다.
/*
Member findMember = em.find(Member.class, 1L);
findMember.setName("Hi");
*/
// JPQL 사용
// 복잡한 쿼리 작성시.
// 대상은 객체가 된다.
List<Member> resultList = em.createQuery("select m from Member as m", Member.class)
.getResultList();
for(Member member : resultList) {
System.out.println("memberId: " + member.getId());
System.out.println("memberName: " + member.getName());
}
// 커밋시 쿼리 수행
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
}
}
참고:
https://www.inflearn.com/course/ORM-JPA-Basic/lecture/21686?speed=1&tab=curriculum&mm=close
728x90
반응형
'DataBase > JPA' 카테고리의 다른 글
[JPA] 플러시 (0) | 2021.07.30 |
---|---|
[JPA] 영속성 컨텍스트 (0) | 2021.07.30 |
[JPA] JPA 환경설정 (0) | 2021.07.29 |
[JPA] JPA 란? (0) | 2021.07.28 |
[JPA] JPA를 사용하는 이유 (0) | 2021.07.27 |
댓글