【プログラミング】【javaSpring Boot標準のORM - j-komatsu/myCheatSheet GitHub Wiki
Spring Bootでは、データベースとオブジェクトをマッピングするためのORM(Object-Relational Mapping)として Spring Data JPA が標準で採用されています。
JPA(Java Persistence API)の実装として Hibernate がデフォルトで使用されます。
- Spring Data JPA(スプリング データ JPA)
- Hibernate(ハイバネート)
特徴 | 説明 |
---|---|
簡潔なリポジトリ定義 | CRUD操作をリポジトリインターフェースだけで実装できる |
JPAの標準仕様準拠 | Hibernate以外のJPAプロバイダ(EclipseLinkなど)も使用可能 |
クエリメソッドの自動生成 | メソッド名からSQLを自動生成(例:findByEmail(String email) ) |
JPQL・ネイティブSQL対応 |
@Query アノテーションを用いてカスタムクエリが実装可能 |
トランザクション管理 |
@Transactional アノテーションによる簡単な管理 |
ページング・ソート |
Pageable を利用してページング・ソート処理を簡単に実装 |
Spring Bootアプリケーションのデータフローは以下のようになります。
- Spring Boot がアプリケーションを制御
- Spring Data JPA を経由して JPA を利用
- JPA の実装として Hibernate を使用
- Hibernate がSQLを発行し、データベースとやり取り
[Spring Boot] → [Spring Data JPA] → [JPA] → [Hibernate] → [データベース]
<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>
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
import jakarta.persistence.*;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// ゲッター・セッター
}
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
User findByEmail(String email);
}
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);
}
}
Spring Data JPA では SQLファイルを用いたデータ定義・初期データ登録 も可能です。
CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
INSERT INTO users (name, email) VALUES ('Alice', '[email protected]');
INSERT INTO users (name, email) VALUES ('Bob', '[email protected]');
spring.sql.init.mode=always
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);
}
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;
}
内容 | 説明 |
---|---|
標準ORM | Spring BootはSpring Data JPAを標準採用し、Hibernateをデフォルト実装とする |
簡単な設定 |
spring-boot-starter-data-jpa を追加するだけで利用可能 |
SQLファイル利用可能 |
schema.sql や data.sql によるスキーマ定義・初期データ登録が可能 |
動的なクエリ |
@Query や NamedNativeQuery でカスタムクエリを実装可能 |
Spring Data JPA を活用すると、データベースとの連携を効率化し、保守性の高いコードが書けるようになります。