JPA를 왜 사용해야 하는가?
- SQL 중심적인 개발에서 객체 중심으로 개발
- 생산성, 유지보수, 패러다임의 불일치 해결, 성능
- 저장 jpa.persist(member)
- 조회 Member member = jpa.find (해당 Entity 클래스, 해당 Entity PK)
- 수정 member.setName("변경할 이름")
- 삭제 jpa.remomve(member)
지연로딩과 즉시 로딩
- 지연 로딩 : 객체가 실제 사용될 때 로딩
- 즉시 로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회
객체와 관계형 데이터베이스의 차이
- 상속 (!! 객체에서 상속하는 관계가 데이터베이스에는 없다)
- 연관관계
- 데이터 타입
- 데이터 식별 방법
데이터 베이스 방언
- 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이 필요하다