create table Member (
id bigint not null,
name varchar(255),
primary key(id)
);
간단한 테이블을 생성한 뒤, hellojpa 패키지 내에 Member 클래스를 생성합니다.이후 아래와 같이 Entity를 생성해줍니다.
@Getter
@Setter
@Entity
public class Member {
@Id //primary key 설정
private Long id;
private String name;
}
이후 JPAMain이라는 클래스에 psvm을 통해서 실행가능한 함수를 만들고, 아래 코드를 통해 JPA를 사용해봅시다.
아래 코드에 눈여겨볼만한 부분은 em.getTransaction()메서드인데 이는 JPA의 모든 데이터 변경(CRUD)는 트랜잭션 내에서 일어나야하기에 트랜잭션을 생성하는 메서드입니다.
사실 EntityManagerFactory, EntityTransaction 같은 것들은 스프링을 사용할 경우 스프링에서 알아서 설정해줍니다.그래도 순수 JPA를 위해서는 알아두는게 좋습니다
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
Member member = new Member();
member.setId(1L);
member.setName("helloJPA");
em.persist(member);
tx.commit();
em.close();
ef.close();
}
아래와 같이 멤버가 생성되는 것을 확인 할 수 있습니다.
로그를 보시면 Insert 쿼리가 DB로 날라간것을 볼 수 있을 겁니다.
이번에는 해당 멤버의 이름을 수정해보겠습니다.
아래와 같은 코드를 실행하면 마법같이 해당 멤버가 수정되어 있습니다.
수정을 한 경우, Entity Manager를 통해 다시 persist할 필요는 없습니다.
Member findMember = em.find(Member.class, 1L);
findMember.setName("updatedName");
JPQL 사용해보기
먼저 JPQL 이란? 우리가 생성한 Entity Object(해당 예제에서는 Member)를 대상으로 하는 쿼리문이라고 보면됩니다. 흔히 배우는 SQL과 비슷한 문법을 가지지만, SQL은 쿼리의 대상이 TABLE이라는 것이 차이점입니다.
아래의 createQuery 메서드를 통해 생성 가능하며, 아래 JPQL은 Member 테이블의 모든 멤버를 가져오라는 의미를 가지고 있습니다.
List<Member> findAllMember = em.createQuery("select m from Member as m",Member.class)
.getResultList();
for (Member member : findAllMember) {
System.out.println("member= " + member.getName());
}