JPA
[JPA] Spring 없이 간단하게 실습하기
행복하개!
2020. 10. 8. 02:02
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;
private String name;
// @Column(name = "user_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;
}
}
이미 주석에 적어두었지만 @Entity를 써야 JPA가 인식을 한다.(관리할 객체로 지정) @Id를 PK를 주는 어노테이션이다. 그외에도 Table Column등으로 테이블에 메핑할 이름과 컬럼명을 설정할 수 있다.
import javax.persistence.*;
import java.util.List;
/*
로그에 쿼리가 보이려면
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
* */
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); // 데이터베이스당 하나 있어야됨
EntityManager em = emf.createEntityManager(); // 엔티티 메니저를 통해서 작업
EntityTransaction tx = em.getTransaction(); // 데이터베이스 모든 변경은 트랜잭션 안에서 일어나야함
tx.begin();
// code
try {
/* 회원 등록 */
Member member = new Member();
member.setId(2L);
member.setName("HelloB"); // 여기까지 해도 안됨 Transaction안에서 작업해야함
em.persist(member); // 저장!
/* 단건 조회 */
Member findMember = em.find(Member.class, 1L);
System.out.println("findMember.getId() = " + findMember.getId());
System.out.println("findMember.getName() = " + findMember.getName());
/* 수정 */
findMember.setName("HelloJPA");
/* 리스트 불러오기 */
List<Member> result = em.createQuery("select m from Member as m", Member.class)
.setFirstResult(5)
.setMaxResults(8)
.getResultList(); // 멤버 객체를 대상으로 함
// 대상이 테이블이 아니고 객체임
for (Member m : result) {
System.out.println("member.getName() = " + m.getName());
}
tx.commit(); // 커밋안하면 반영이 안된다
} catch (Exception e) {
tx.rollback(); // 에러시 롤백
} finally {
em.close();
}
emf.close();
}
}
엔티티 매니저 팩토리는 하나 생성되서 애플리케이션 전체에서 공유된다. 엔티티 매니저는 쓰레드 간에 공유가 되면 안되고 사용되면 버려야한다.
그리고 가장 중요한 것 JPA의 모든 데이터 변경은 트랜잭션 안에서 실행되어야 한다.