Java 진영에서 대표적인 SQL Mapper중 하나이다. SQL과 쿼리 결과를 mapping할 객체만 설정하면 JDBC API를 직접 다루지 않아도 쿼리 결과를 mapping한 객체에 담아준다.
SQL을 직접 작성하므로 복잡한 SQL을 직접 최적화하는 것이 용이하다.
테이블과 객체가 매핑된 것이 아니기에 자유롭게 다양한 객체에 결과를 담을 수 있다.
테이블 스키마 수정시 SQL부터 매핑한 객체까지 수정사항이 많다.
런타임에 에러를 확인할 수 있다.
작성된 쿼리가 특정 데이터베이스에 종속된 것일 수 있어, 데이터베이스 변경에 유연하지 못하다.
Java Persistence API의 줄임말로 Java 진영에서 ORM 기술 표준으로 사용하는 인터페이스 모음이다. JPA 구현체로는 Hibernate, Eclipse Link, OpenJPA 등이 있다.
쿼리 작성이 필요없어, SQL에 익숙하지 않아도 바로 개발이 가능하다.
DB에 종속적이지 않아 DB 변경에도 코드 변경이 없다.
객체지향적으로 Data를 다룰 수 있다.
객체와 매핑되어있어 객체 변경을 통하여 테이블 스키마 수정이 가능하여 편리하다.
컴파일타임에 에러를 확인할 수 있다.
러닝 커브가 있다.
복잡한 쿼리의 최적화에 적합하지 않다.
잘못사용하면 오히려 성능저하가 있을 수 있다. (N + 1 문제 등)
https://incheol-jung.gitbook.io/docs/q-and-a/spring/jpa-vs-mybatis
https://velog.io/@gkskaks1004/JPA%EC%99%80-MyBatis%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%A9%B4%EC%84%9C-%EC%9E%A5%EB%8B%A8%EC%A0%90