프로젝트를 진행하면서 이전에는 Mybatis를 사용해서 DB연결을 했는데, JPA와 Hibernate를 사용해보려고 한다. 이것들의 정의와 왜 사용하는지에 대해 알아보자
JPA(Java Persistence API)는 자바 진영의 ORM(Object Relational Mapping:객체 관계 매핑)의 기술의 표준을 말한다. 간단히 말하면 객체관계 매핑을 구현한 API라고 이해하면 된다.
자바 진영의 다양한 ORM 프레임워크 중 가장 많이 사용되는 프레임워크로써, Hibernate 기반으로 만들어진 ORM 기술 표준이 바로 JPA이다. 다시 말하면, JPA라는 ORM기술 표준을 구현한 것이 Hibernate이므로, JPA를 사용하려면 Hibernate를 사용하면 된다.
어떻게 보면 위의 JPA특징에서 언급한 것이 곧 JPA를 사용하는 이유이기도 하다. 좀더 구체적으로 보자면, 패러다임 불일치 문제를 한번 생각해보자.
//기존의 Mybatis를 활용한 쿼리
//animal이라는 테이블에 데이터를 저장하는 쿼리
<insert id="insert" parameterType="Animal">
insert into animal (animal_name, sex) values("고양이","수컷")
</insert>
이렇듯, 기존에는 모든 쿼리를 완벽하게 써주어야했다. 만약, Java의 상속과 같은 구조를 DB에 저장하려면 어떻게 해야 할까? Foreign Key를 활용해서 하면 되지 않냐고 할 수도 있다. 할 수는 있지만 복잡하다. 그래서 아예 쿼리문을 간단히 사용할 수 있도록 JPA라는 API에게 맡겨버리는 것이다. Java의 상속, 다형성, 추상클래스 같은 패러다임과 DB구조의 패러다임의 불일치를 해소해 줄 수 있지 않는가. 다시말하면 기존의 개발 방식인 SQL 중심개발에서 객체 중심으로 개발을 할 수 있게 된 것이다.
//JPA를 활용할 때
jpa.persist(animal)