Загружаем каталог…
Загружаем каталог…
JDBC, ORM,JPA, Hibernate, Spring Data JPA JDBC 자바 애플리케이션에서 데이터베이스에 접근하고 SQL을 실행하기 위한 표준 API JDBC를 직접 사용하는 경우 개발자는 SQL을 작성하고, 실행 결과를 자바 객체로 변환하는 작업도 처리 JDBC는 자바와 DB가 통신할 수 있는 수단을 제공하지만, 객체와 테이블을 자동으로 매핑 String sql = "SELECT * FROM memo WHERE id = ?"; PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setLong(1, 1L); ResultSet rs = pstmt.executeQuery(); if (rs.next()) { Long id = rs.getLong("id"); String username = rs.getString("username"); } ### ORM - **객체지향 프로그래밍의 객체와 관계형 데이터베이스의 테이블을 매핑하는 기술** - 자바 애플리케이션에서는 객체를 사용하지만, 관계형 DB에서는 테이블과 행(Row)을 사용한다. 이러한 표현 방식의 차이를 해결하고 객체 중심으로 데이터를 다룰 수 있도록 돕는 기술이 ORM이다. ### JPA - **자바에서 ORM을 사용하기 위한 표준 명세** - JPA 자체가 ORM 기능을 구현한 프로그램인 것이 아님! - ORM을 구현하기 위한 인터페이스와 동작 규칙을 정의하고, 실제 동작은 JPA 구현체가 담당 예를 들어 JPA는 다음과 같은 인터페이스와 메서드를 정의한다 : - `EntityManager` - `EntityManagerFactory` - `persist()` - `find()` - `remove()` ### Hibernate - **JPA를 실제로 구현한 대표적인 ORM 프레임워크** - JPA API를 사용하여 엔티티의 저장이나 조회를 요청하면 Hibernate가 엔티티 매핑 정보를 바탕으로 필요한 SQL을 생성하고 실행한다. ### Spring Data JPA - JPA를 더 편리하게 사용할 수 있도록 지원하는 Spring Data 프로젝트의 모듈 - **JPA만 사용할 경우 개발자가 EntityManager를 이용하여 엔티티 저장, 조회 등의 작업을 직접 구현해야 하는데, Spring Data JPA를 사용하면 JpaRepository 인터페이스를 통해 기본적인 CRUD 기능을 간편하게 사용**할 수 있다. - Repository 구현체를 자동으로 생성하고, 내부적으로 JPA의 EntityManager 등을 이용해 DB 작업 수행 | 구분 | 개념 | 역할 | |---|---|---| | 🍀**JDBC** | 데이터베이스 접근 API | SQL 실행 및 DB 통신 | | 🍀**ORM** | 객체-관계 매핑 기술 | 객체와 관계형 DB 매핑 | | 🍀**JPA** | ORM 표준 명세 | ORM 사용을 위한 API와 규칙 정의 | | 🍀**Hibernate** | ORM 프레임워크 | JPA 기능 구현, SQL 생성 및 실행 | | 🍀**Spring Data JPA** | JPA 추상화 기술 | Repository를 통한 CRUD 및 쿼리 기능 제공 | --- ## 엔티티와 테이블 ### 엔티티(클래스) - 데이터베이스 테이블과 매핑되는 자바 클래스 - `@Entity`가 선언된 자바 클래스가 JPA에서 관리할 수 있는 엔티티 클래스가 된다. - JPA를 사용한다고 **반드시 DB 테이블이 새로 생성되는 것은 아니다.** _- Hibernate 설정에 따라_ ### 엔티티와 테이블 간 관계 - 엔티티 클래스 `Memo` 는 memo 테이블과 매핑된다. - 하나의 엔티티 인스턴스는 테이블의 하나의 행(Row)에 대응한다. #### 엔티티 클래스 @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Memo { @Id @GeneratedValue(stragy = GeneratedType.IDENTITY) private Long id; @Column(nullable = false) private String username; @Column(nullable = false) private String contents; } #### DB 테이블 | id | username | contents | |-------|-------|-------| | 1 | Jude | Jude memo | | 2 | Judy | Judy memo | | 3 | Juice | Jucie memo | ## 엔티티 인스턴스 생성 엔티티 클래스와 DB 테이블이 매핑되었다고 해서 엔티티 인스턴스가 자동으로 생성되는 것은 아니다. ### 1. 개발자가 생성하는 경우 ```java Memo memo = new Memo(); 개발자가 new 키워드를 사용하여 직접 인스턴스를 생성 이 시점의 객체는 단순한 자바 객체, JPA의 영속성 컨텍스트에서 관리되는 상태❌ em.persist(memo); // 영속성 컨텍스트에 등록 persist() 를 호출하면 엔티티가 영속 상태 가 되고, 이후 적절한 시점에 DB에 INSERT SQL 실행 2. DB에서 데이터를 조회하는 경우 Memo memo = em.find(Memo.class, 1L); Hibernate는 필요할 경우 다음 작업을 수행한다: 엔티티 조회 요청 DB에 SELECT SQL 실행 조회 결과(Row) 확인 Memo 엔티티 인스턴스 생성 Row의 컬럼 값을 인스턴스 필드에 매핑 완성된 인스턴스 반환 ✨ [참고] JPA 영속성 컨텍스트에 이미 해당 엔티티가 존재하면 별도의 DB 조회나 새 인스턴스 생성 없이 기존 인스턴스를 반환할 수도 있다.
То, что RADAR обнаружил и классифицировал для этой возможности. Это опубликованный источником текст, а не подтверждение, что предложение ещё действует.
[내일배움캠프] TIL(6) Spring 입문주차🌱 - JPA 범부의 하루(1). JDBC, ORM,JPA, Hibernate, Spring Data JPA JDBC 자바 애플리케이션에서 데이터베이스에 접근하고 SQL을 실행하기 위한 표준 API JDBC를 직접 사용하는 경우 개발자는 SQL을 작성하고, 실행 결과를 자바 객체로 변환하는 작업도 처리 JDBC는 자바와 DB가 통신할 수 있는 수단을 제공하지만, 객체와 테이블을 자동으로 매핑 String sql = "SELECT * FROM memo WHERE id = ?"; PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setLong(1, 1L); ResultSet rs =…
Открыть источник