プログラミング逆引き辞典

~ 多言語対応のプログラミングレシピ ~

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昇順)メソッドに変える
 
 


前へ次へ
 
目次へ戻る