Member테이블을 H2에 생성 후 insert 해보자!
em.persist
를 통해 insert 쿼리 실행
Member member = new Member();
member.setId(3L); // member의 id를 3으로 설정
member.setName("HelloC"); // member의 name을 HelloC로 설정
em.persist(member); // member를 persist를 사용하여 insert
JpaMain을 실행하면 insert문이 실행된 것을 확인 할 수 있다.
Member테이블에 HelloC가 잘 저장되었다.
💎 em.find
를 통해 select 쿼리 실행
Member findMember = em.find(Member.class,1L);
📍 em.remove
를 통해 findMember를 delete 쿼리 실행을 통해 삭제
Member findMember = em.find(Member.class,1L);
em.remove(findMember);
set.Name
을 통해 name update! 따로 persist를 통해 저장하지 않아도 바로 수정이 된다.
🧐 어떻게 자바 객체에서 값만 바꿨는데 수정이 될까?
JPA가 변경 여부 확인을 트랙잭션 커밋 전에 확인 후 변경시에 update 쿼리를 날린다.
Member findMember = em.find(Member.class,1L);
findMember.setName("HelloJPA");
💣 주의할 점
- 엔티티 매니저 팩터리는 하나만 생성해서 애플리케이션 전체에서 공유해야한다.
- 엔티티 매니저는 쓰레드간에 공유하면 안된다. (사용하고 버려야한다.)
- JPA의 모든 데이터변경은 트랜잭션 안에서 실행해야한다. ⭐️ ⭐️ ⭐️
JPA를 사용하면 엔티티 객체
를 중심으로 개발한다. 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하다.
애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요하다.
그래서 JPA는 SQL을 추상화한 JPQL
이라는 객체 지향 쿼리 언어
를 제공한다.
- JPQL은 엔티티 객체를 대상으로 쿼리한다.
- SQL은 데이터베이스 테이블을 대상으로 쿼리한다.
- 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리이다.
- SQL을 추상화 해서 특정 데이터베이스 SQL에 의존하지않는다.
JPQL은 createQuery
를 통해 사용할 수 있다.
JPQL을 사용하면 페이징도 간단하게 구현할 수 있다.
.setFirstResult(5)
: 5번째 페이지 임을 명시.setMaxResult(8)
: 8개의 데이터를 가져온다.