Spring Data JPAを使用すると、Javaアプリケーションでデータベースとの連携を効率的に行うことができます。
1. プロジェクト設定
Mavenの場合
<!-- pom.xml -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
Gradleの場合
// build.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'org.postgresql:postgresql'
}
2. エンティティクラスの作成
データベースのテーブルに対応するエンティティクラスを作成します。以下は、User
エンティティの例です。
// User.java
import javax.persistence.*;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "username", nullable = false, unique = true)
private String username;
@Column(name = "email", nullable = false, unique = true)
private String email;
// コンストラクタ、ゲッター、セッター、その他のメソッド
}
3. リポジトリの作成
エンティティに対するデータベース操作を行うリポジトリ(Repository)インターフェースを作成します。Spring Data JPAが自動的に実装を提供します。
// UserRepository.java
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
// 追加のカスタムクエリメソッドを定義可能
}
4. サービスクラスの作成
サービスクラスを作成し、リポジトリを介してデータベース操作を行います。
// UserService.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public List<User> getAllUsers() {
return userRepository.findAll();
}
public User getUserById(Long id) {
return userRepository.findById(id).orElse(null);
}
public User saveUser(User user) {
return userRepository.save(user);
}
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
}
5. リポジトリクラスのカスタムクエリメソッド
// UserRepository.java
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface UserRepository extends JpaRepository<User, Long> {
// メソッド名から自動生成されるクエリ
List<User> findByUsername(String username);
// ANDやORで結合条件を追加した例
List<User> findByUsernameAndEmail(String username, String email);
// LIKEや%での部分一致検索
List<User> findByUsernameContaining(String keyword);
// Order Byを追加した例
List<User> findByOrderByUsernameAsc();
}