SpringBoot入門 vol.9:データベース操作(登録・更新・削除・検索)のメソッドを追加しよう
前提条件:「Spring Boot入門 vol.7:データベースを使おう」の状態から解説するので、この章から始める場合は下記の章を参考に準備してください
Spring Boot入門 vol.7:データベースを使おう
①「登録」・「更新」・「削除」・「1件検索」メソッドの作成
「CustomerService.java」にDB下記を追記
package com.example.service;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.example.domain.Customer;
import com.example.repository.CustomerRepository;
@Service
@Transactional
public class CustomerService {
@Autowired
CustomerRepository customerRepository;
public List<Customer> findAll() {
return customerRepository.findAll();
}
//ポイント①
public void insert(Customer customer) {
customerRepository.save(customer);
}
//ポイント②
public void update(Customer customer) {
customerRepository.save(customer);
}
//ポイント③
public void delete(Integer id) {
customerRepository.deleteById(id);
}
//ポイント④
public Optional<Customer> selectById(Integer id) {
return customerRepository.findById(id);
}
}
【ポイント】
1.customerRepository.save()メソッドを使って登録処理を行うinsert()メソッド
2.customerRepository.save()メソッドを使って更新処理を行うupdate()メソッド
3.customerRepository.deleteById(Integer id)メソッドを使って削除処理を行うdelete()メソッド
4.customerRepository.findById(Integer id)メソッドを使って1件取得するselectById()メソッド
※処理の詳細はコントローラークラスに記述する
②自作のDB操作メソッド作成
これまでは「JpaRepositoryインターフェース」の継承によって使用できるDB操作メソッドを紹介してきた
しかし実際にアプリケーションを作成していると自由にDB操作をする必要が往々にしてある
そんな時は「リポジトリインターフェース」内で「@Query」を使用してJPQL(SQLのようなもの)を記述すればよい
例として全件検索メソッド(ID昇順)を作成してみる
・CustomerRepository.java
package com.example.repository;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import com.example.domain.Customer;
public interface CustomerRepository extends JpaRepository<Customer, Integer>{
//ポイント①
@Query("SELECT u FROM Customer ORDER BY u.id")
List<Customer> findAllOrderById();
}
【ポイント】
1.「@Query("JPQL文")」の構文で記述する
※ORDER BY句のIDはプロパティ名の為、今回の場合は小文字の「id」となることに注意
サービスクラスの記述を変更
・CustomerService.java
package com.example.service;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.example.domain.Customer;
import com.example.repository.CustomerRepository;
@Service
@Transactional
public class CustomerService {
@Autowired
CustomerRepository customerRepository;
//ポイント①
public List<Customer> findAll() {
return customerRepository.findAllOrderById();
}
public void insert(Customer customer) {
customerRepository.save(customer);
}
public void update(Customer customer) {
customerRepository.save(customer);
}
public void delete(Integer id) {
customerRepository.deleteById(id);
}
public Optional<Customer> selectById(Integer id) {
return customerRepository.findById(id);
}
}
【ポイント】
1.「customerRepository.findAll()メソッド」を「customerRepository.findAllOrderById()メソッド」に変更
リポジトリインターフェースに登録した全件取得(ID昇順)メソッドに変える