쿼리
insert into question (subject, content) values ('안녕하세요', '가입 인사드립니다 ^^');
ORM
Question q1 = new Question();
q1.setSubject("안녕하세요");
q1.setContent("가입 인사드립니다 ^^");
this.questionRepository.save(q1);
객체지향적으로 관리
JPA를 통해 데이터를 객체지향적으로 관리할 수 있기 때문에 개발자는 비즈니스 로직에 집중할 수 있고 객체지향 개발이 가능하다. Mybatis에서는 비슷한 CRUD SQL을 계속 반복적으로 사용하고, 객체 모델링보다 데이터 중심의 테이블 설계를 우선시했다. 그러다보니 객체지향의 장점인 추상화, 캡슐화, 상속, 다형성을 제대로 사용하지 못하고 객체를 단순히 데이터 전달 목적(VO, DTO)으로만 사용했다.
예를 들어, SQL 작성을 도와주는 인터페이스인 JDBC 사용을 위해 ERD로 바꿔줘야 하는데, ERD는 단순한 데이터 테이블들이 어떤 관계를 가지고 있는지 나타내는 다이어그램이라 객체지향의 대표적인 특징인 상속을 표현하지 못한다.
하지만, JPA는 상속관계에 있는 테이블에 대해 Join을 알아서 처리해주는 등 객체지향적으로 관리할 수 있기 때문에 전체 프로그램 구조를 일관되게 유지할 수 있다.
SQL 자동 생성: 유지보수가 쉬움
자바 객체와 DB 테이블 사이의 매핑 설정을 기준으로 SQL을 맞춤으로 생성한다. 객체를 기준으로 SQL을 생성하여 동작하기 대문에 CRUD용 SQL를 직접 작성하지 않아도 되며, 테이블 변경시 JPA의 Entity만 수정하면된다.
DBMS에 대한 코드 종속성이 줄어듬
DBMS란 데이터베이스를 조작하는 소프트웨어이다. JPA를 사용하면 데이터베이스에 종속적이지 않아서 데이터베이스가 변경되더라도 JPA가 해당 데이터베이스에 맞는 쿼리를 알아서 생성해준다.