본문 바로가기
웹개발/JPA

JPA 기초

by 철없는민물장어 2023. 6. 29.
728x90
반응형

이미 JPA를 사용해봤지만 기초를 제대로 배우지 못했다는 생각이 들어 기초부터 다시 차근차근 배우고자 한다.

 

(이번시간에는 간단한 실행만 해보았다)

 

public class Main {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
        EntityManager em = emf.createEntityManager();

        EntityTransaction tx = em.getTransaction();
        tx.begin();

        try {
//            Member member = em.find(Member.class, 1L);//멤버클래스 PK1번 찾아옴
//            System.out.println("findMember id = "+member.getId());
//            System.out.println("findMember name = "+member.getName());
//
//            member.setName("수정네임");
//
            List<Member> result = em.createQuery("select m from Member as m", Member.class).getResultList();
            tx.commit();
        }catch(Exception e){
            tx.rollback();
        }finally {
            em.close();
        }
        emf.close();
    }
}

 


EntityManagerFactory와 EntityManager


애플리케이션에서는 일반적으로 EntityManagerFactory 인스턴스를 하나만 생성해서 사용한다. `EntityManagerFactory`는 엔티티를 관리하는 `EntityManager` 인스턴스를 만드는 역할을 한다. `EntityManager`는 데이터베이스 연결과 같은 리소스를 사용하기 때문에, 사용이 끝나면 즉시 종료해서 리소스를 반환해야 한다. 


EntityManagerFactory emf = Persistence.createEntityManagerFactory("name");
EntityManager em = emf.createEntityManager();

 

 

트랜잭션과 데이터 변경


JPA에서의 모든 데이터 변경은 트랜잭션 내에서 이루어져야 한다. 트랜잭션은 작업의 단위를 의미하며, 모든 트랜잭션은 ACID(원자성, 일관성, 고립성, 지속성) 원칙을 따른다. 이는 데이터의 일관성과 무결성을 보장하기 위한 중요한 원칙이다. 트랜잭션의 시작과 끝을 명확하게 설정하고, 이 사이에 데이터 변경 작업을 수행해야한다.

 

 

JPQL (Java Persistence Query Language)


JPA는 JPQL이라는 객체 지향 쿼리 언어를 제공한다. JPQL은 SQL과 유사하지만, 차이점이 있다. SQL은 데이터베이스 테이블을 대상으로 쿼리를 하지만, JPQL은 엔티티 객체를 대상으로 쿼리를 한다. 즉, SQL은 데이터 중심의 관점에서 접근하는 반면, JPQL은 객체 중심의 관점에서 접근한다는 것이다. 

 

String jpql = "select m from Member m where m.age > 20";
List<Member> result = em.createQuery(jpql, Member.class).getResultList();


이렇게, JPQL을 통해 개발자는 객체지향적인 방식으로 데이터를 조작하고 검색할 수 있게 된다. 이는 SQL에 비해 더 직관적이고 이해하기 쉬운 코드를 작성하는 데 도움을 준다.

728x90
반응형

'웹개발 > JPA' 카테고리의 다른 글

상속관계 매핑  (0) 2023.07.07
다양한 연관관계  (0) 2023.07.03
연관관계 매핑  (0) 2023.06.30
엔티티 매핑  (0) 2023.06.29
영속성 컨텍스트  (0) 2023.06.29

댓글