JPA [기본] JPA 시작하기

신재원·2023년 1월 12일
0

JPA 기본

목록 보기
2/31

JPA를 왜 사용해야 하는가?

  • SQL 중심적인 개발에서 객체 중심으로 개발
  • 생산성, 유지보수, 패러다임의 불일치 해결, 성능
  • EX
  1. 저장 jpa.persist(member)
  2. 조회 Member member = jpa.find (해당 Entity 클래스, 해당 Entity PK)
  3. 수정 member.setName("변경할 이름")
  4. 삭제 jpa.remomve(member)

지연로딩과 즉시 로딩

  • 지연 로딩 : 객체가 실제 사용될 때 로딩
  • 즉시 로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회

객체와 관계형 데이터베이스의 차이

  1. 상속 (!! 객체에서 상속하는 관계가 데이터베이스에는 없다)
  2. 연관관계
  3. 데이터 타입
  4. 데이터 식별 방법

데이터 베이스 방언

  • JPA는 특정 데이터 베이스에 종속 X
  • 각각의 데이터베이스가 제공하는 SQL 문법 함수가 조금씩다름
    • MYSQL은 LIMIT, Oracle은 ROWNUM등 문법이 다르다.
  • 정리
    • JPA가 클라이언트가 설정한 데이터베이스에 따라 적용된다.

JPA 프로젝트 생성

// META-INF에서 정의한 Name = hello를 팩토리에 넣어준다.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");

   // 엔티티 매니저 선언 (쓰레드간에 공유X)
-> EntityManager em = emf.createEntityManager();

   // 데이터 베이스 커넥션을 받아야된다 "Transaction을 통해
->  EntityTransaction tx = em.getTransaction();
        tx.begin();
        
-> 엔티티 저장, 수정, 삭제 
  - 수정 같은 경우에는 기존에 있는 데이터를 밀고 새로운걸 저장한다.
    "persist"로 저장을 안해도됨
    
->  // DB에 저장
    tx.commit();
  • !! 중요 JPA의 모든 데이터 변경은 트랜잭션 안에서 실행해야된다.

JPQL

  • JPA는 SQL을 추상화한 JPQL 이라는 객체 지향 쿼리 언어 제공
  • JPQL은 엔티티 객체를 대상으로 쿼리 (방언에 영향을 받지않음)
  • 모든 DB 데이터를 객체로 변환해서 검색하는것은 불가능하다..
  • 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요하다

0개의 댓글