>Java >java지도 시간 >SpringBoot가 JPA 프레임워크를 통합하는 방법

SpringBoot가 JPA 프레임워크를 통합하는 방법

王林
王林앞으로
2023-05-19 09:52:501935검색

    1. Spring Boot 데이터 액세스 개요

    Spring Data는 데이터베이스 액세스를 단순화하고 Spring에서 제공하는 클라우드 서비스를 지원하도록 설계된 오픈 소스 프레임워크입니다. 이는 관계형 및 비관계형 데이터베이스를 위한 다수의 데이터 액세스 솔루션을 포함하는 포괄적인 프로젝트로, 다양한 데이터 액세스 기술을 빠르고 쉽게 사용할 수 있도록 설계되었습니다. 기본적으로 Spring Boot는 데이터 액세스 계층을 통합하기 위해 Spring Data를 통합하는 방법을 채택합니다. 많은 자동 구성을 추가하고 다양한 데이터 액세스 템플릿 xxxTemplate 및 통합 리포지토리 인터페이스를 도입하여 데이터 액세스 계층의 작업을 단순화합니다.

    Spring Data는 다양한 유형의 데이터베이스를 지원합니다. Spring Boot는 Spring Data에서 지원하는 데이터베이스를 통합 및 관리하고 다양한 종속성 스타터를 제공합니다. 테이블을 통해 일반적으로 사용되는 Spring Boot의 데이터베이스 종속성 시작 프로그램을 나열할 수 있습니다.

    이름 설명
    mybatis-spring-boot-starter MyBatis 스타터
    mybatis-plus-boot-starter My Batis-Plus Launcher
    봄 -boot-starter-data-jpa Hibernate가 포함된 Spring Data JPA용 스타터
    spring-boot starter-data-redis Spring Data Redis 및 Jedis 클라이언트가 포함된 Redis 키-값 데이터 저장소용 스타터
    spring-boot-starter-data-neo4j Neo4j 그래프 데이터베이스 및 Spring Data Neo4j용 스타터 Neo4j
    spring-boot-starter-data-mongodb MongoDB 및 Spring Data MongoDB용 스타터

    2. Spring Data 소개

    JPA(Java Persistence API, Java persistence API)는 Sun에서 공식적으로 제안한 Java 지속성 사양으로, Java 개발자에게 관계형을 관리하기 위한 개체/관계형 매핑 도구를 제공합니다. 데이터는 기존 Persistence 개발 작업을 단순화하고 ORM(Object Relational Mapping, Object/Relational Mapping) 기술을 통합하는 것입니다. JPA 사양을 기반으로 Spring Data는 장점을 최대한 활용하고 ORM 관계형 데이터에 대한 지속성 작업을 수행하기 위해 Spring Data JPA 모듈을 제안합니다.

    Spring Data JPA는 ORM 프레임워크 및 JPA 사양을 기반으로 Spring으로 캡슐화된 JPA 애플리케이션 프레임워크 세트로, 추가, 삭제, 수정, 쿼리 등의 공통 기능을 제공하므로 개발자는 더 적은 코드로 데이터 작업을 구현할 수 있습니다. 확장하기 쉽습니다. Spring Boot의 JPA 통합을 소개하기 전에 Spring Data JPA의 기본 사용법을 간략하게 소개하겠습니다.

    2.1 ORM 엔터티 클래스 작성

    Spring Data JPA 프레임워크는 ORM 관계가 있는 데이터에서 작동하므로 Spring Data JPA를 사용할 때 먼저 데이터 테이블과 매핑할 엔터티 클래스를 작성하고 매핑 관계를 구성해야 합니다.

    @Entity(name = "t_comment")  // 设置ORM实体类,并指定映射的表名
    public class Discuss {
        @Id   // 表明映射对应的主键id
        @GeneratedValue(strategy = GenerationType.IDENTITY) // 设置主键自增策略
        @Column(name = "article_id")  // 指定映射的表字段名
        private Integer articleId;
        // Generate: Getter and Setter、toString()
    }

    위 코드에 대해 이 형제님이 사용된 Annotation에 대해 간략하게 설명을 해드리겠습니다.

    주석 @Entity를 사용하여 엔터티 클래스를 데이터베이스에 매핑하려고 함을 나타냅니다. 이때 데이터베이스 테이블 이름은 기본적으로 클래스 이름의 첫 글자를 소문자로 사용합니다. 물론 name 속성을 사용하여 매핑된 테이블 이름을 지정할 수도 있습니다.

    @ld: 클래스 속성 또는 getter 메소드에 표시되어 특정 속성이 테이블의 기본 키에 해당함을 나타냅니다.

    @GeneratedValue 주석은 생략 가능하며 @ld 주석과 동일한 위치에 표시되며 해당 속성에 해당하는 기본 키 생성 전략을 정의하는 데 사용됩니다. Spring Data JPA가 지원하는 기본 키 생성 전략에는 TABLE(특정 데이터베이스 테이블을 사용하여 기본 키 저장), SEQUENCE(기본 키 자동 증가를 지원하지 않는 데이터베이스 기본 키 생성 전략), IDENTITY(기본 키 자동 증가)가 포함됩니다. 증분) 및 AUTO(JPA는 기본 옵션인 앞의 3가지 적합한 전략을 독립적으로 선택합니다).

    클래스 속성과 테이블 필드 이름이 다른 경우 @Column 주석을 name 속성과 함께 사용하여 클래스 속성에 해당하는 테이블 필드 이름을 나타낼 수 있습니다.

    2.2 리포지토리 인터페이스 쓰기

    다양한 테이블 데이터 작업에 해당하는 리포지토리 인터페이스를 작성하고 필요에 따라 해당 데이터 작업 방법을 작성합니다.

    public interface DiscussRepository extends JpaRepository<Discuss, Integer> {
        // 1.查询author非空的Discuss评论集合(JPA支持的方法名关键字查询方式)
        List<Discuss> findByAuthorNotNull();
        // 2.根据文章id分页查询Discuss评论集合
        @Query("SELECT c FROM t_comment c WHERE c.articleId = ?1")
        List<Discuss> getDiscussPaged(Integer articleid, Pageable pageable);
        // 3.使用元素SQL语句,根据文章id分页查询Discuss评论集合,nativeQuery为true表示用来编写原生SQL语句 
        @Query(value = "SELECT * FROM t_comment WHERE article_Id = ?1", nativeQuery = true)
        List<Discuss> getDiscussPaged2(Integer articleid, Pageable pageable);
        //4.根据评论id修改评论作者author
        @Transactional // 表示支持事务管理
        @Modifying // 表示支持数据变更
        @Query("UPDATE t_comment c SET c.author = ?1 WHERE c.id = ?2")
        Integer updateDiscuss(String author, Integer id);
        // 5.根据评论id删除评论
        @Transactional
        @Modifying
        @Query("DELETE t_comment c WHERE c.id = ?1")
        Integer deleteDiscuss(Integer id);
    }

    이 형제가 리포지토리 인터페이스를 작성할 때 특별한 요구 사항을 설명할 것입니다.

    2.2.1 XXRepositoryffbe4eed12645b467bc428156552ef14 인터페이스 상속

    Spring Data JPA를 사용하여 Repository 인터페이스를 맞춤설정할 때 XXRepositoryffbe4eed12645b467bc428156552ef14인터페이스를 상속해야 합니다. 여기서 T는 작동할 엔터티 클래스를 나타내고 ID는 기본 클래스를 나타냅니다. 엔터티 클래스의 주요 데이터 유형입니다. 위의 예에서는 JpaRepository 인터페이스를 상속하도록 선택했습니다. JpaRepository의 상속 구조는 아래 그림과 같습니다.

    JpaRepository 인터페이스 상속 구조에 관련된 인터페이스는 다음과 같습니다.

    (1) Repository는 Repository 인터페이스를 사용자 정의하기 위해 Spring Data JPA에서 제공하는 최상위 상위 인터페이스입니다.

    (2) CrudRepository 인터페이스는 Repository의 상속된 인터페이스 중 하나이며 몇 가지 기본 CRUD 메소드를 포함합니다.

    (3) PagingAndSortingRepository 인터페이스는 CrudRepository 인터페이스를 상속하고 페이징 및 정렬의 두 가지 방법을 제공합니다.

    (4) QueryByExampleExecutor 인터페이스는 조건부 캡슐화된 쿼리에 대한 최상위 상위 인터페이스로, 예제 인스턴스를 통해 복잡한 조건부 쿼리를 실행할 수 있습니다.

    JpaRepository 인터페이스는 PagingAndSortingRepository 인터페이스와 QueryByExampleExecutor 인터페이스를 모두 상속하고 몇 가지 추가 데이터 작업 방법을 제공합니다. 일반적으로 사용자 정의 Repository 인터페이스 파일을 작성할 때 JpaRepository 인터페이스를 상속하도록 직접 선택합니다.

    2.2.2 데이터를 조작하는 다양한 방법

    Spring Data JPA를 사용하여 데이터를 조작하는 경우 구현 방법에는 여러 가지가 있는데 주요 방법은 다음과 같습니다.

    (1) 사용자 정의 인터페이스가 JpaRepository 인터페이스를 상속하는 경우 기본적으로 일반적으로 사용되는 일부 CRUD 메서드가 포함됩니다.

    (2) 사용자 정의 리포지토리 인터페이스에서는 SQL 문과 함께 @Query 주석을 사용하여 데이터를 확인, 수정 및 삭제할 수 있습니다.

    (3) 사용자 정의 리포지토리 인터페이스에서는 메서드 이름 키워드를 직접 사용하여 쿼리 작업을 수행할 수 있습니다.

    그 중 Spring Data JPA에서 지원하는 메소드 이름 키워드와 해당 SQL 조각 설명은 다음 표와 같습니다.

    2.2.3 @Transactional 트랜잭션 관리

    맞춤형 Repository 인터페이스에서는 데이터 변경 작업(수정, 삭제) 시 @Query 애노테이션 사용 여부와 상관없이 트랜잭션 관리 메소드 위에 @Transactional 애노테이션을 추가해야 한다. 그렇지 않으면 프로그램 실행 중에 InvalidDataAccessApiUsageException이 발생합니다. 트랜잭션 관리를 위해 Repository 인터페이스 메서드를 호출하는 비즈니스 계층 서비스 클래스에 @Transactional 주석이 추가된 경우 Repository 인터페이스 파일에서 @Transactional 주석을 생략할 수 있습니다.

    2.2.4 @Moditying 주석

    사용자 정의 Repository 인터페이스에서 @Query 주석을 사용하여 데이터 변경 작업(수정, 삭제)을 수행하려면 @Query 주석을 사용하는 것 외에도 @Moditying 주석도 추가해야 합니다. 데이터 변경 사항을 나타냅니다.

    2.3.5 복잡한 조건 쿼리

    JPA는 복잡한 조건 쿼리에 예제 인스턴스 사용도 지원합니다. 예를 들어 JpaRepository 인터페이스에서 기존 findAll(Example1eefd63bbe027a2807ccada294a3372c var1) 메서드를 쿼리합니다.

    3. Spring Boot를 사용하여 JPA를 통합합니다.

    Spring Boot를 사용하여 JPA를 통합합니다.

    3.1 Spring Data JPA 종속성 스타터 추가

    프로젝트의 pom.xml 파일에 Spring Data JPA 종속성 스타터를 추가합니다.

    참고:

    Spring Data JPA에 해당하는 버전 번호를 작성하지 않았습니다. 이는 Spring Boot가 Spring Data JPA의 버전 번호를 균일하게 관리하기 때문입니다.

    3.2 ORM 엔터티 클래스 작성

    작업의 편의를 위해 이전에 생성한 데이터베이스 테이블 t_comment를 예로 들어 해당 엔터티 클래스를 복사하여 토론으로 이름을 바꾸고 JPA 해당 주석을 추가합니다. 매핑.

    3.3 저장소 인터페이스 작성

    데이터베이스 테이블 t_comment를 작동하기 위해 com.cy.repository 패키지 아래에 저장소 인터페이스 DiscussRepository를 만듭니다.

    3.4 인터페이스 메소드 테스트를 위한 유닛 테스트 작성

    JPA 관련 유닛 테스트를 작성하기 위해 현재 위치에 Chapter03ApplcationTests 테스트 클래스를 복사한 후 JpaTests로 이름을 변경하고, DiscussRepository 인터페이스에 해당하는 테스트 메소드를 작성하기 위해 내용을 살짝 수정합니다.

    테스트 메소드는 JpaRepository 기본 메소드, 메소드 이름 키워드, @Query 주석 및 예제 캡슐화된 매개변수를 사용하여 데이터 작업을 수행합니다.

    3.5 통합 테스트

    JpaTests 테스트 클래스에서 단위 테스트 방법을 선택하여 효과를 입증하세요.

    위 내용은 SpringBoot가 JPA 프레임워크를 통합하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제