개요
- Persistence.createEntityManagerFactory("example Name") 구문을 활용하여 엔티티 매니저 객체를 생성하고 이를 활요하여 조회, 추가, 삭제, 업데이트 동작을 수행한다.
- meber Class에 맞게 H2 DB에 테이블을 생성한다.
create table Member (
id bigint not null;
name varchar(255);
promary key (id)
);
- JPQL을 활용하여 조회를 실행해본다.
EntityManagerFactory
- 엔티티 매니지 팩토리는 DB당 1개가 생성된다.
- 엔티티매니저는 쓰레드간에 절대 공유하면 안된다.
- JPA 모든 데이터 변경은 트랜잭션 안에서 실행해야한다.
- RDB는 트랜잭션 안에서 실행하도록 설꼐 되어있다.
- 표기나 작성 안할 경우 자동으로 트랜잭션이 실행된다. (서버 환경 설정 autoCommit)
JpaMain.class
package hellojpa;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import java.awt.*;
import java.util.List;
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
// db 작업시에는 EntityManager 객체를 반드시 생성하고 닫아준다.
EntityManager em = emf.createEntityManager();
// code
// tran 객체
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
/*
추가
*/
// Member member = new Member();
// member.setId(2L);
// member.setName("hihi2");
// em.persist(member);
/*
조회
*/
// Member findMember = em.find(Member.class, 1L);
// System.out.println(findMember.getId());
/*
업데이트
: 엔티티가 관리하는 객체에 수정점이 생기면
트렌젝션이 자동으로 수정된 내역을 update를 실행한다.
*/
// Member findMember = em.find(Member.class, 1L);
// findMember.setName("Lee");
/*
JPQL
DB별 방언에 적용할 수 있도록 persistence에 DB 설정하면
원하는 결과값을 가져올 수 있다. (DB가 변경되도 동일하게 적용한다. 코드수정 없음)
검색쿼리를 객체를 대상으로 쿼리를 실행 할 수 있도록 도와준다.
객체 지향 SQL이다.
*/
List<Member> result = em.createQuery("select m from Member as m", Member.class)
.setFirstResult(1)
.getResultList();
for(Member m : result){
System.out.println(m.getId() + m.getName());
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
emf.close();
}
}
}
Member.class
package hellojpa;
import javax.persistence.Entity;
import javax.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;
}
}
'jpa' 카테고리의 다른 글
JPA 영속성 (0) | 2021.03.14 |
---|---|
JPA 프로젝트 개요 및 생성 (0) | 2021.02.28 |
JPA 개요 (0) | 2021.02.22 |