logo

스프링 부트 JPA

JPA 란 무엇입니까?

스프링 부트 JPA 관리를 위한 Java 사양입니다. 관계형 Java 애플리케이션의 데이터. 이를 통해 Java 객체/클래스와 관계형 데이터베이스 간의 데이터에 액세스하고 유지할 수 있습니다. JPA는 다음과 같습니다 객체 관계 매핑 (ORM). 인터페이스의 집합입니다. 또한 런타임도 제공합니다. 엔터티매니저 데이터베이스에 대한 객체에 대한 쿼리 및 트랜잭션을 처리하기 위한 API입니다. 플랫폼 독립적인 객체지향 쿼리 언어인 JPQL(Java Pertant Query Language)을 사용합니다.

지속성의 맥락에서 이는 세 가지 영역을 다룹니다.

  • 자바 지속성 API
  • 객체관계형metadata
  • API 자체는 고집 패키지

JPA는 프레임워크가 아닙니다. 이는 모든 프레임워크에서 구현할 수 있는 개념을 정의합니다.

왜 JPA를 사용해야 할까요?

JPA는 JDBC, SQL 및 직접 작성한 매핑보다 더 간단하고 깔끔하며 노동 집약적입니다. JPA는 성능 지향적이지 않은 복잡한 애플리케이션에 적합합니다. JDBC에 비해 JPA의 주요 장점은 JPA에서는 데이터가 객체와 클래스로 표현되는 반면 JDBC에서는 데이터가 테이블과 레코드로 표현된다는 것입니다. POJO를 사용하여 데이터베이스 프로그래밍을 단순화하는 영구 데이터를 나타냅니다. JPA에는 다음과 같은 몇 가지 다른 장점이 있습니다.

  • JPA는 데이터베이스별 SQL 방언으로 DDL을 작성하는 것을 방지합니다. 대신 XML로 매핑하거나 Java 주석을 사용할 수 있습니다.
  • JPA를 사용하면 데이터베이스별 SQL 방언으로 DML을 작성하는 것을 피할 수 있습니다.
  • JPA를 사용하면 DML 언어 없이도 Java 개체와 그래프를 저장하고 로드할 수 있습니다.
  • JPQL 쿼리를 수행해야 할 때 (네이티브) SQL 테이블과 열이 아닌 Java 엔터티 측면에서 쿼리를 표현할 수 있습니다.

JPA 기능

JPA에는 다음과 같은 기능이 있습니다.

  • 강력한 저장소이자 사용자 정의입니다. 객체 매핑 추상화.
  • 그것은 지원합니다 매장 간 지속성 . 이는 엔터티가 MySQL 및 Neo4j(Graph Database Management System)에 부분적으로 저장될 수 있음을 의미합니다.
  • 쿼리 메소드 이름에서 쿼리를 동적으로 생성합니다.
  • 도메인 기본 클래스는 기본 속성을 제공합니다.
  • 투명한 감사를 지원합니다.
  • 사용자 정의 저장소 코드를 통합할 수 있습니다.
  • 사용자 정의 네임스페이스를 사용하여 Spring Framework와 쉽게 통합할 수 있습니다.

JPA 아키텍처

JPA는 비즈니스 엔터티를 관계형 엔터티로 저장하는 소스입니다. POJO를 엔터티로 정의하는 방법과 관계를 통해 엔터티를 관리하는 방법을 보여줍니다.

리눅스에서 스크립트를 실행하는 방법

다음 그림은 JPA의 핵심 클래스와 인터페이스를 설명하는 JPA의 클래스 수준 아키텍처를 설명합니다. javax 지속성 패키지. JPA 아키텍처에는 다음 단위가 포함되어 있습니다.

    고집:EntityManagerFactory 인스턴스를 얻기 위한 정적 메서드가 포함된 클래스입니다.EntityManager공장:EntityManager의 팩토리 클래스입니다. EntityManager의 여러 인스턴스를 생성하고 관리합니다.엔터티 관리자:인터페이스입니다. 객체에 대한 지속성 작업을 제어합니다. 쿼리 인스턴스에서 작동합니다.실재:엔터티는 데이터베이스에 레코드로 저장되는 지속성 개체입니다.지속성 단위:모든 엔터티 클래스 집합을 정의합니다. 애플리케이션에서는 EntityManager 인스턴스가 이를 관리합니다. 엔터티 클래스 집합은 단일 데이터 저장소에 포함된 데이터를 나타냅니다.엔터티 거래:그것은 1-1 EntityManager 클래스와의 관계. 각 EntityManager에 대해 작업은 EntityTransaction 클래스에 의해 유지됩니다.질문:기준에 맞는 관계 객체를 얻기 위해 각 JPA 벤더가 구현하는 인터페이스입니다.
스프링부트 JPA

JPA 클래스 관계

위에서 논의한 클래스와 인터페이스는 관계를 유지합니다. 다음 그림은 클래스와 인터페이스 간의 관계를 보여줍니다.

스프링 부트 JPA
  • EntityManager와 EntiyTransaction 간의 관계는 다음과 같습니다. 1-1 . 각 EntityManager 작업에는 EntityTransaction 인스턴스가 있습니다.
  • EntityManageFactory와 EntiyManager 간의 관계는 다음과 같습니다. 일대다 . EntityManager 인스턴스에 대한 팩토리 클래스입니다.
  • EntityManager와 Query의 관계는 다음과 같습니다. 일대다 . EntityManager 클래스의 인스턴스를 사용하여 원하는 만큼의 쿼리를 실행할 수 있습니다.
  • EntityManager와 Entity 간의 관계는 다음과 같습니다. 일대다 . EntityManager 인스턴스는 여러 엔터티를 관리할 수 있습니다.

JPA 구현

JPA는 오픈 소스 API입니다. Eclipse, RedHat, Oracle 등 다양한 기업 벤더들이 JPA를 추가하여 새로운 제품을 제공하고 있습니다. 다음과 같은 인기 있는 JPA 구현 프레임워크가 있습니다. 최대 절전 모드, EclipseLink, DataNucleus, 등으로도 알려져 있습니다. 객체 관계 매핑 (ORM) 도구입니다.

ORM(객체 관계 매핑)

ORM에서는 Java 객체를 데이터베이스 테이블에 매핑하거나 그 반대로 매핑하는 것을 호출합니다. 객체 관계형 매핑. ORM 매핑은 다음 사이의 브리지 역할을 합니다. 관계형 데이터베이스 (테이블 및 레코드) 및 자바 애플리케이션 (클래스 및 객체).

다음 그림에서 ORM 계층은 어댑터 계층입니다. 객체 그래프의 언어를 SQL 및 관계 테이블의 언어에 맞게 조정합니다.

스프링부트 JPA

ORM 계층은 애플리케이션과 데이터베이스 사이에 존재합니다. Java 클래스와 객체를 관계형 데이터베이스에 저장하고 관리할 수 있도록 변환합니다. 기본적으로 지속되는 이름은 테이블 이름이 되고 필드는 열이 됩니다. 애플리케이션이 설정되면 각 테이블 행은 개체에 해당합니다.

JPA 버전

이전 버전의 EJB는 다음을 사용하여 비즈니스 로직 레이어와 결합된 지속성 레이어를 정의합니다. javax.ejb.EntityBean 상호 작용. EJB 사양에는 JPA 정의가 포함되어 있습니다.

EJB 3.0을 도입하면서 Persistence 레이어를 분리하여 JPA 1.0(Java Persistence API)으로 지정했습니다. 본 API의 사양은 JSR 220을 사용하여 2006년 5월 11일 JAVA EE5 사양과 함께 공개되었습니다.

2019년 JPA는 JPA로 이름이 변경되었습니다. 자카르타 지속성 . JPA의 최신 버전은 2.2 . 다음 기능을 지원합니다.

  • 자바 8, 데이터 및 시간 API
  • AttributeConvertes에 CDI 주입
  • @Repeatable 주석을 만듭니다.

JPA와 최대 절전 모드의 차이점

JPA: JPA는 Java 객체와 관계형 데이터베이스 간의 데이터에 액세스, 관리 및 지속하는 데 사용되는 Java 사양입니다. 이는 ORM의 표준 접근 방식입니다.

최대 절전 모드: 관계형 데이터베이스 시스템에 Java 개체를 저장하는 데 사용되는 경량 오픈 소스 ORM 도구입니다. JPA 제공업체입니다. 이는 JPA에서 제공하는 일반적인 접근 방식을 따릅니다.

다음 표에서는 JPA와 Hibernate의 차이점을 설명합니다.

JPA 최대 절전 모드
JPA는 자바 사양 Java 애플리케이션에서 관계 데이터를 매핑하는 데 사용됩니다. 최대 절전 모드는 ORM 프레임워크 데이터 지속성을 다루는 것입니다.
JPA는 구현 클래스를 제공하지 않습니다. 구현 클래스를 제공합니다.
플랫폼 독립적인 쿼리 언어를 사용합니다. JPQL (Java 지속성 쿼리 언어). 이라는 자체 쿼리 언어를 사용합니다. HQL (최대 절전 모드 쿼리 언어).
이는 다음에서 정의됩니다. javax.지속성 패키지. 이는 다음에서 정의됩니다. org.hibernate 패키지.
다음과 같은 다양한 ORM 도구에서 구현됩니다. 최대 절전 모드, EclipseLink, 등. 최대 절전 모드는 공급자 PSD의.
JPA는 엔터티매니저 데이터의 지속성을 처리하기 위해. 최대 절전 모드 사용 세션 데이터의 지속성을 처리하기 위해.

스프링 부트 스타터 데이터 JPA

Spring Boot는 스타터 종속성을 제공합니다. 스프링 부트-스타터-데이터-jpa Spring Boot 애플리케이션을 관계형 데이터베이스와 효율적으로 연결합니다. spring-boot-starter-data-jpa는 내부적으로 spring-boot-jpa 종속성을 사용합니다.

 org.springframework.boot spring-boot-starter-data-jpa 2.2.2.RELEASE 

스프링 부트 JPA 예

JPA를 사용하여 데이터베이스에 연결하는 Spring Boot 애플리케이션을 만들어 보겠습니다. 다음 예에서는 인메모리 데이터베이스를 사용했습니다. 아파치 더비.

아파치 더비: 이것은 오픈 소스, 임베디드 완전히 Java로 구현된 관계형 데이터베이스입니다. Apache License 2.0에 따라 사용할 수 있습니다. Apache Derby에는 다음과 같은 장점이 있습니다.

  • 설치, 배포 및 사용이 쉽습니다.
  • 이는 Java, JDBC 및 SQL 표준을 기반으로 합니다.
  • 이는 모든 Java 기반 솔루션에 Derby를 내장할 수 있는 내장 JDBC 드라이버를 제공합니다.
  • 또한 Derby Network Client JDBC 드라이버 및 Derby Network Server를 사용하여 클라이언트/서버 모드를 지원합니다.

Spring Boot는 다음과 같은 내장형 데이터베이스를 자동 구성할 수 있습니다. H2, HSQL, 그리고 더비 데이터베이스 . 연결 URL을 제공할 필요가 없습니다. 사용하려는 내장형 데이터베이스에 대한 빌드 종속성만 포함하면 됩니다.

d 플립플롭

Spring Boot에서는 Apache Derby 데이터베이스를 추가하는 것만으로 쉽게 통합할 수 있습니다. 더비 pom.xml 파일의 종속성.

 org.apache.derby derby runtime 

1 단계: Spring 초기화 프로그램 열기 https://start.spring.io/ .

2 단계: 최신 버전의 Spring Boot를 선택하세요. 2.3.0(스냅샷)

3단계: 제공 그룹 이름. 우리는 제공했습니다 com.javatpoint.

4단계: 제공 인공물 ID. 우리는 제공했습니다 아파치 더비 예 .

5단계: 종속성을 추가합니다. 스프링 웹, 스프링 데이터 JPA, 그리고 Apache Derby 데이터베이스 .

숨겨진 앱을 공개하는 방법

6단계: 다음을 클릭하세요. 생성하다 단추. 생성 버튼을 클릭하면 프로젝트가 Jar 파일로 래핑되어 로컬 시스템에 다운로드됩니다.

스프링부트 JPA

7단계: 추출 Jar 파일을 다운로드하여 STS 작업공간에 붙여넣습니다.

8단계: 가져오기 프로젝트 폴더를 STS로 복사합니다.

파일 -> 가져오기 -> 기존 Maven 프로젝트 -> 찾아보기 -> apache-derby-example 폴더 선택 -> 완료

가져오는 데 시간이 좀 걸립니다.

9단계: 이름으로 패키지 만들기 com.javatpoint.model 폴더에 src/메인/java.

10단계: 이름으로 클래스 만들기 사용자 기록 패키지에 com.javatpoint.model 그리고 다음을 수행합니다:

  • 세 가지 변수 정의 아이디, 이름, 그리고 이메일 .
  • Getter 및 Setter를 생성합니다.
    파일을 마우스 오른쪽 버튼으로 클릭 -> 소스 -> 게터 및 세터 생성
  • 기본 생성자를 정의합니다.
  • 수업을 다음으로 표시합니다. 실재 주석을 사용하여 @실재.
  • 표시 ID 주석을 사용하여 기본 키로 @ID.

UserRecord.java

 package com.javatpoint.model; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class UserRecord { @Id private int id; private String name; private String email; //default conatructor public UserRecord() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } } 

11단계: 이름으로 패키지 만들기 com.javatpoint.controller 폴더에 src/메인/java.

12단계: 이름으로 컨트롤러 클래스를 만듭니다. 사용자 컨트롤러 패키지에 com.javatpoint.controller 그리고 다음을 수행합니다:

  • 주석을 사용하여 클래스를 컨트롤러로 표시합니다. @RestController.
  • 수업을 자동으로 연결했습니다. 사용자 서비스 주석을 사용하여 @Autowired .
  • 우리는 두 개의 매핑을 정의했습니다. 모든 사용자 가져오기 그리고 다른 하나는 사용자 추가.

UserController.java

 package com.javatpoint.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.javatpoint.model.UserRecord; import com.javatpoint.service.UserService; import java.util.List; @RestController public class UserController { @Autowired private UserService userService; @RequestMapping('/') public List getAllUser() { return userService.getAllUsers(); } @RequestMapping(value='/add-user', method=RequestMethod.POST) public void addUser(@RequestBody UserRecord userRecord) { userService.addUser(userRecord); } } 

13단계: 이름으로 패키지 만들기 com.javatpoint.service 폴더에 src/메인/java.

14단계: 이름으로 서비스 클래스를 만듭니다. 사용자 서비스 패키지에 com.javatpoint.service 그리고 다음을 수행합니다:

새로운 라인 파이썬
  • 주석을 사용하여 클래스를 서비스로 표시 @서비스.
  • 자동 연결 사용자 저장소
  • 방법 정의 getAllUsers() 다음 목록을 반환합니다.
  • 다른 메소드 이름 정의 사용자 추가() 사용자 기록을 저장하는 것입니다.

UserService.java

 package com.javatpoint.service; import java.util.List; import java.util.ArrayList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.javatpoint.model.UserRecord; import com.javatpoint.repository.UserRepository; @Service public class UserService { @Autowired private UserRepository userRepository; public List getAllUsers() { ListuserRecords = new ArrayList(); userRepository.findAll().forEach(userRecords::add); return userRecords; } public void addUser(UserRecord userRecord) { userRepository.save(userRecord); } } 

15단계: 이름으로 패키지 만들기 com.javatpoint.repository 폴더에 src/메인/java.

16단계: 이름으로 저장소 인터페이스를 만듭니다. 사용자 저장소 패키지에 com.javatpoint.repository 그리고 확장 Crud저장소 .

UserRepository.java

 package com.javatpoint.repository; import org.springframework.data.repository.CrudRepository; import com.javatpoint.model.UserRecord; public interface UserRepository extends CrudRepository { } 

17단계: 이제 ApacheDerbyExampleApplication.java 파일. 애플리케이션을 설정할 때 기본적으로 생성됩니다.

ApacheDerbyExampleApplication.java

 package com.javatpoint; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ApacheDerbyExampleApplication { public static void main(String[] args) { SpringApplication.run(ApacheDerbyExampleApplication.class, args); } } 

이제 요구 사항에 따라 필요한 모든 클래스와 패키지를 설정했습니다. 우리는 아무것도 제공하지 않았습니다. 연결 URL 데이터베이스용. 위의 모든 단계를 완료한 후 프로젝트 디렉터리는 다음과 같습니다.

스프링 부트 JPA

애플리케이션을 실행해 보겠습니다.

자바 문자열 형식 지정

18단계: 열기 ApacheDerbyExampleApplication.java 파일을 다운로드하여 Java 애플리케이션으로 실행합니다.

19단계: 브라우저를 열고 URL http://localhost:8080/을 호출합니다. 목록에 사용자를 추가하지 않았기 때문에 빈 목록을 반환합니다.

데이터베이스에 사용자를 추가하기 위해 우리는 우편 을 사용하여 요청 우편 집배원 .

20단계: 열기 우편 집배원 그리고 다음을 수행합니다:

  • 선택 우편
  • URL http://localhost:8080/add-user를 호출합니다.
  • 다음을 클릭하세요.
  • 콘텐츠 유형을 다음과 같이 선택하세요. JSON (애플리케이션/json).
  • 데이터베이스에 삽입하려는 데이터를 삽입하십시오. 다음 데이터를 삽입했습니다.
 { 'id': '001', 'name': 'Tom', 'email': '[email protected]' } 
  • 다음을 클릭하세요. 보내다 단추.
스프링 부트 JPA

보내기 버튼을 클릭하면 다음과 같이 표시됩니다. 상태:200 OK . 이는 요청이 성공적으로 실행되었음을 의미합니다.

21단계: 브라우저를 열고 URL http://localhost:8080을 호출합니다. 데이터베이스에 삽입한 사용자를 반환합니다.

스프링 부트 JPA
Apache derby 예제 프로젝트 다운로드