스프링
[자바 orm 표준 jpa 프로그래밍] 코드 정리 - 1
MC류짱
2023. 4. 12. 17:11
더보기
※ 이 시리즈는 김영한님의 자바 orm 표준 jpa 프로그래밍 강의를 정리합니다.
데이터 넣기
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
// table에 insert하기
try {
Member member = new Member();
member.setId(2L);
member.setName("helloB");
em.persist(member);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
}
수정
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 findMember = em.find(Member.class, 1L);
findMember.setName("helloJPA");
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
}
JPQL
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
// jpql
try {
List<Member> resultList = em.createQuery("select m from Member as m", Member.class)
.setFirstResult(1)
.setMaxResults(5)
.getResultList();
for (Member member : resultList) {
System.out.println("member = " + member.getName());
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
}
- JPQL을 통해 여러 데이터의 조회, LIMIT을 주는 등 조작할 수 있다.
- select m from Member as m -> 등을 통해 객체로 조회한다.
영속성 컨텍스트
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("HelloJPA");
//엔티티를 영속
em.persist(member);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
}
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(10L);
member.setName("HelloJPA");
em.persist(member);
// DB를 조회하지 않고 영속성 컨텍스트에 있는 데이터를 조회
// 1차 캐시
Member findMember = em.find(Member.class, 10L);
System.out.println("findMember = " + findMember.getName());
// 이 때 한번 쿼리를 날려서 영속성 컨텍스트에 저장
Member findMember1 = em.find(Member.class, 10L);
// 이 때는 쿼리를 날리지 않고 영속성 컨텍스트에서 가져옴
Member findMember2 = em.find(Member.class, 10L);
// findMember1 == findMember2 -> true
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
}