데이터 베이스를 직접 다룰때 문제점
1)DB만들기
2)애플리케이션에서 SQL문 작성
3)SQL을 JDBC를 사용해서 직접 실행해줘야 한다.
4)SQL 결과를 객체로 직접 만들어줘야 한다.
sql을 직접 수정해야 한다. 코드 한줄씩 더 추가된다. sql작성에 시간이 많이 든다.
직접 sql을 수정하지 않아도 될 수 있도록 ORM이라는 기술이 나왔다.
ORM은 애플리케이션 class와 RDB(Relational Database)의 테이블을 매핑하는 것이다.
기술적으로 애플리케이션 객체를 RDB테이블에 자동으로 영속화 해준다.
이점으로는 개발자는 비즈니스 로직을 구성하는데 집중할 수 있고 Query문이 난잡하게 코딩되지 않아 코드의 가독성을 높이고, 객체지향적인 접근만 고려하여 코드를 구성하므로 생산성이 증가된다. 유지보수 리팩토링에 유리하고, 데이터베이스 방식이 변화한다고 해도 쿼리를 재구성하지 않아도 되게한다.
ORM 객체 데이터 베이스 매핑도구 JPA는 자바 ORM기술 대표적 표준 명세이다.
애플리케이션 서버와 JDBC API사이에 존재한다.
"hibernate" : 표준 명세, 자바 스프링이 구현됨
JPA Entity 클래스란 JPA에 의해서 관리가되고 있는 데이터 베이스와 1:1 매핑된 클래스 이다.
JPA(Java Persistence API) : 자바에서 ORM기술 표준으로 사용하는 인터페이스 모음이다.
자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의 하였다.
인터페이스 이기에 Hibernate, OpenJPA 등이 JPA를 구현한다.
JPA는 반복적인 CRUD SQL을 처리해준다. 개발자는 어떤 SQL이 실행될지만 생각하면 예측도 쉽게 할 수 있다. 객체중심으로 개발할 수 있기에 생산성이 올라가고 유지보수를 상대적으로 쉽게 할 수 있다. 데이터 베이스에는 JAVA와는 다르게 상속관계가 존재하지 않는데 JPA는 table의 슈퍼타입과 서브타입 관계로 나누어 상속관계를 구현하였다.
공통된 속성을 사원테이블에 넣어놓고 specialized 속성은 각자 기술직과 관리직에 넣어둔다.
만약 기술직 객체를 JPA를 이용해 저장한다면 사원 테이블에서 저장하고 기술직 테이블을 저장할 것이다. 조회할때도 사원테이블과 기술직 테이블을 같이 가져올 것이다.