반응형
ORM VS SQL Mapper
가) ORM
- DB Data ← 매핑 → Object 필드
- 객체를 통해 간접적으로 DB Data를 다룹니다.
- 객체와 DB의 데이터를 자동으로 매핑해줍니다.
- SQL 쿼리가 아닌 메서드로 데이터를 조작할 수 있습니다.
- 객체간 관계를 바탕으로 SQL을 자동으로 생성 합니다.
- Persistant API라고 할 수 있습니다.
- JPA, Hibernate
나) SQL Mapper
- SQL ← 매핑 → Object 필드
- SQL 문으로 직접 DB를 조작합니다.
- 예) Mybatis, jdbcTemplate
위 내용 출처: https://data-make.tistory.com/541
JPA(JAVA Persistence API) 설명
- 영속성 컨텍스트(Persistent Context)
- Entity Manager 생성(Entity Manager Factory)를 통해 생성
- Entity Manager가 가지고 있는 트랜잭션(Transaction)을 시작
- Entity Manager를 통해 영속 컨텍스트에 접근하고 객체를 작업
- 트랜잭션을 커밋(Commit)하여 DB에 반영
- Entity Manager 종료
- @Entity : 해당 클래스가 JPA 엔티티 클래스라고 정의
- @Table : 해당 클래스가 DB의 어느 테이블에 매핑되는지 정의
- @Id : DB 테이블의 Primary Key 칼럼과 매핑
- @Column : 매핑할 데이터베이스의 칼럼 이름과 필드 변수의 이름이 다를 경우 매핑하기 위해 사용
EntityManager.interface 메소드 참고
package javax.persistence;
import ...
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);
// More interface methods...
}
Hibernate 는 JPA 인터페이스의 구현체 → 라이브러리!(Library)
위 사진처럼 JPA의 핵심 인터페이스인 EntityManagerFactory, EntityManager, EntityTransaction 을
Hibernate 에서 각각 SessionFactory, Session, Transaction 으로 상속받고 각각 Impl 로 구현한 것을 확인할 수 있습니다.
=> JPA를 사용하기 위해 꼭 Hibernate를 사용할 필요는 없다!
=> 그래서 JPA만 따로 공부하는것.
결론. Spring Data JPA
Repository : JPA를 한 단계 더 추상화 시킨 인터페이스
- 구현에 있어서 JPA를 사용합니다.
- 사용자가 Repository 인터페이스에 정해진 규칙대로 메소드를 입력하면, Spring 이 알아서 해당 메소드 이름에 적합한 쿼리를 날리는 구현체를 만들어서 Bean으로 등록해줍니다.
- 메서드 호출
- 해당 메서드에 해당하는 쿼리 실행 구현체 생성
- Bean으로 등록
-
public interface MemberRepository extends JpaRepository<Member, Long> { Member findByName(String name); Page<Member> findByName(String name, Pageable pageable); }
반응형
'웹(Web) > 백엔드(Backend)' 카테고리의 다른 글
스프링MVC패턴 Controller / Model(DAO,DTO,Service) / View (0) | 2022.02.13 |
---|---|
DTO vs VO 비교 (+Entity) (0) | 2022.02.13 |
스프링핵심원리 - 객체 지향 설계 원칙/프레임워크vs라이브러리/IoC/DI (0) | 2022.01.06 |
Intellij SpringBoot @Test Junit Run test using 설정 (0) | 2021.12.10 |
SpringBoot RequestParam(required 옵션) 에러 (0) | 2021.11.23 |