관계형 데이터베이스를 사용하는 방식을 정의하는 인터페이스입니다.
java ORM(Object Relational Mapping) 기술의 표준 명세라고 할 수 있습니다.
JPA를 다룰 때 필요한 EntityManager가 인터페이스로 정의되어 있습니다.
public interface EntityManager {
public void persist(Object entity);
public <T> T merge(T entity);
public void remove(Object entity);
public <T> T find(Class<T> entityClass, Object primaryKey);
...
}
ORM(Object Relational Mapping)
DB 데이터와 Object 필드를 매핑합니다. 즉, 객체를 통해 간접적으로 DB 데이터를 다룹니다.
예) JPA, Hibernate
SQL Mapper
SQL문으로 DB를 직접 조작합니다.
예) MyBatis, jdbcTemplate
JPA 인터페이스의 구현체로서, 라이브러리입니다.
EntityManagerFactory, EntityManager, EntityTransaction을 SessionFactory, Session, Transaction으로 상속받아 구현하였습니다.
즉, JPA를 사용할 때 꼭 구현체인 Hibernate를 사용하지 않아도 된다는 점! 하지만 굳이 사용하지 않을 필요도 없어보입니다.
Spring에서 제공하는 모듈로, Spring에서 JPA를 사용할 때 주로 사용됩니다.
Spring에서 JPA를 더 추상화한 인터페이스 JpaRepository는, 사용자가 정해진 규칙대로 메소드를 입력하면 Spring이 알아서 해당 메소드 이름에 적합한 쿼리를 생성하는 구현체를 만들어 Bean으로 등록합니다. (findByEmail()...)

@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {
List<Member> findAllByEmailIn(List<String> emails);
}
특징