【プログラミング】【javaSpring Boot標準のORM - j-komatsu/myCheatSheet GitHub Wiki

Spring Boot標準のORM(Object-Relational Mapping)

1. はじめに

Spring Bootでは、データベースとオブジェクトをマッピングするためのORM(Object-Relational Mapping)として Spring Data JPA が標準で採用されています。
JPA(Java Persistence API)の実装として Hibernate がデフォルトで使用されます。

Spring Data JPA の読み方

  • Spring Data JPA(スプリング データ JPA)
  • Hibernate(ハイバネート)

2. Spring Data JPAの特徴

特徴 説明
簡潔なリポジトリ定義 CRUD操作をリポジトリインターフェースだけで実装できる
JPAの標準仕様準拠 Hibernate以外のJPAプロバイダ(EclipseLinkなど)も使用可能
クエリメソッドの自動生成 メソッド名からSQLを自動生成(例:findByEmail(String email)
JPQL・ネイティブSQL対応 @Query アノテーションを用いてカスタムクエリが実装可能
トランザクション管理 @Transactional アノテーションによる簡単な管理
ページング・ソート Pageable を利用してページング・ソート処理を簡単に実装

3. アーキテクチャ概略(初心者向け)

Spring Bootアプリケーションのデータフローは以下のようになります。

  1. Spring Boot がアプリケーションを制御
  2. Spring Data JPA を経由して JPA を利用
  3. JPA の実装として Hibernate を使用
  4. Hibernate がSQLを発行し、データベースとやり取り
[Spring Boot] → [Spring Data JPA] → [JPA] → [Hibernate] → [データベース]

4. 設定方法

(1) 依存関係の追加(pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

(2) application.properties 設定

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
spring.h2.console.enabled=true

5. 実装方法

(1) Entityクラスの作成

import jakarta.persistence.*;

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;
    
    // ゲッター・セッター
}

(2) リポジトリインターフェースの作成

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
    User findByEmail(String email);
}

(3) サービスクラスの作成

import org.springframework.stereotype.Service;

@Service
public class UserService {
    private final UserRepository userRepository;
    
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    
    public User getUserByEmail(String email) {
        return userRepository.findByEmail(email);
    }
}

6. SQLファイルの利用

Spring Data JPA では SQLファイルを用いたデータ定義・初期データ登録 も可能です。

(1) schema.sql(スキーマ定義)

CREATE TABLE users (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL
);

(2) data.sql(初期データ)

INSERT INTO users (name, email) VALUES ('Alice', '[email protected]');
INSERT INTO users (name, email) VALUES ('Bob', '[email protected]');

(3) application.properties でSQL実行設定

spring.sql.init.mode=always

7. 高度な利用(専門者向け)

(1) @Query を用いたカスタムSQL

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.data.jpa.repository.JpaRepository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    @Query("SELECT u FROM User u WHERE u.email = :email")
    User findByEmail(@Param("email") String email);
}

(2) NamedNativeQuery の利用

import jakarta.persistence.*;

@Entity
@NamedNativeQuery(
    name = "User.findByEmail",
    query = "SELECT * FROM users WHERE email = ?",
    resultClass = User.class
)
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;
}

8. まとめ

内容 説明
標準ORM Spring BootはSpring Data JPAを標準採用し、Hibernateをデフォルト実装とする
簡単な設定 spring-boot-starter-data-jpa を追加するだけで利用可能
SQLファイル利用可能 schema.sqldata.sql によるスキーマ定義・初期データ登録が可能
動的なクエリ @QueryNamedNativeQuery でカスタムクエリを実装可能

Spring Data JPA を活用すると、データベースとの連携を効率化し、保守性の高いコードが書けるようになります。

⚠️ **GitHub.com Fallback** ⚠️