[Java] java의 JPA 기능

eunhye_·2022년 8월 18일
0

Java

목록 보기
9/10

JPA

-> Java persistence API
= 자바의 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음, 구현된 클래스와 DB를 매핑해주기 위해 사용되는 framework이다.

👀ORM ..?

= Object-Relational Mapping

객체와 관계형 데이터베이스를 매핑한다는 뜻

ORM 프레임워크는 객체와 테이블을 매핑해 패러다임의 불일치를 개발자 대신 해결해준다. 객체는 객체대로 생성하고, 데이터베이스는 데이터베이스에 맞도록 설계를 가능하게 해준다. 개발자는 이를 매핑하는 방법만 전달해주면 된다.

JPA의 장점

  • SQL 중심적인 개발에서 객체 중심적인 개발을 할 수 있게 해준다.
  • 데이터 접근 추상화와 벤더 독립성 (데이타베이스를 변경하면 JPA에게 다른 데이터베이스를 사용한다고 알려주면 된다.)
  • 매핑하는 정보가 Class로 명시 되었기 때문에 ERD를 보는 의존도를 낮출 수 있고 유지보수 및 리팩토링에 유리

단점

query가 복잡해지면 표현하는 데 한계가 있다.
그리고 raw query보다 느리다.

Setting❕❗

Project Setting

  • 기본 project -> maven project로 convert -> JPA Project 추가 convert

  • persitence.xml 파일생성 확인
    persitence.xml 파일에 < persistence-unit name="db" > 과
    run.java 파일에
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("db");
    " " 안에 동일하게
    => persistence-unit name은 EntityManager가 받는 input parameter로 일치시켰을 때 persitence.xml을 통해 db와 연결 가능하다.

  • persitence.xml 파일에
    < property name="hibernate.hbm2ddl.auto" value="create" />
    => 테이블 생성 모드, 기존에 테이블이 있어도 drop 후 다시 생성
    기존 테이블의 데이터도 초기화한다.
    < property name="hibernate.hbm2ddl.auto" value="none" />
    => 테이블 비생성 모드, 기존 테이블에 데이터 값만 추가하거나 변경, 삭제한다. 기존 테이블을 drop하지 않고 사용하려면 반드시!! none으로 변경 후 사용

  • model 파일 persitence.xml에 추가하기
    Persitence.xml 파일에 오른쪽 마우스 JPA tool -> synchronize class List
    persitence.xml 파일에 자동으로 @Entity annotation이 있는 클래스가 추가된다.
    또는 persitence.xml 파일에 직접 추가
    <class> model.domain.entity.Employee </class>

Entity와 영속 속성

  • Entity : DB 테이블과 매칭되는 개념

EntityManagerFactory : 공장

EntityManager : 관리자

EntityTransaction : 생산 작업

Entity : 생산품

영속성이란

기본적으로 비휘발성이다. 이를 통해 컴퓨터가 꺼지고 다운되도 데이터가 날아가지 않도록 하는 성질이다.
Entity Manager가 영속성 context를 관리하며, 데이터는 수행하는 퀴리에 따라 다음과 같이 속성이 달라진다.

  • 영속(persist) : EntityManager를 통해서 Entity가 Persistence Context에 저장된 상태. -> 영속 상태의 Entity만 DB에 전송된다.
    ex : persist(), find()
  • 준영속 : Entity가 한 번 Persistence Context에 저장되었다가 분리된 상태
    ex : detach(), clear(), close()
  • 비영속 : Entity가 Persistence Context와 무관한 상태, 객체 생성만은 가능 저장은 하지 않은 상태
  • 삭제 : Entity가 Persistence Context에 삭제 된 상태
                                        

JPA를 통한 db 접속 및 Close

EntityManager em = emf.createEntityManager();`
EntityTransaction tx = em.getTransaction();
		tx.begin();
        ...수행할 코드
        tx.commit(); //db에 실제 실행
		em.close(); //지원 반환
		emf.close();
        

CRUD 로직

  • SQL의 Insert
    객체 생성 후 persist() 메소드로 전달
Employee e1 = new Employee(1, "KimCS", 30, "Sales")
em.persist(e1); //jdk 메모리에 임시 저장	
  • SQL의 Select
    find() 메소드 사용, find(객체.class, peimarykey)
Employee e2 = em.find(Employee.class, 1)
  • SQL의 Update
    set, get 메소드등을 통하여 변경
e1.setDept("Marketing");
  • SQL의 Delete
    remove() 메소드 사용
em.remove(e1);

참고 사이트 :
https://ultrakain.gitbooks.io/jpa/content/chapter1/chapter1.3.html

0개의 댓글