🫠

Springサービス層の基本: アノテーションとメソッド一覧

2024/08/01に公開

サービス層で使用されるアノテーション

@Service

サービスクラスをSpringコンテナにサービスとして登録します。ビジネスロジックを実装するために使用されます。
例:

@Service
public class MyService {
    // ビジネスロジックの実装
}

@Autowired

Springの依存性注入機能を使用して、他のBeanを自動的にインジェクションします。
例:

@Autowired
private MyRepository myRepository;

@Transactional

メソッドまたはクラスにトランザクション管理を適用します。トランザクションはデータベース操作の一貫性を保つために使用されます。
例:

@Transactional
public void performTransaction() {
    // トランザクション内で実行する処理
}

@Qualifier

複数のBeanが存在する場合に、どのBeanをインジェクションするかを指定します。
例:

@Autowired
@Qualifier("specificBean")
private MyService myService;

サービス層でよく使用されるメソッド

CRUD操作に関連するメソッド

create

新しいエンティティを作成するメソッド。

public MyEntity create(MyEntity entity) {
    return myRepository.save(entity);
}

read

エンティティを読み取るメソッド。主にIDで検索する。

public MyEntity read(Long id) {
    return myRepository.findById(id).orElseThrow(() -> new EntityNotFoundException("Entity not found"));
}

update

既存のエンティティを更新するメソッド。

public MyEntity update(Long id, MyEntity updatedEntity) {
    MyEntity existingEntity = myRepository.findById(id).orElseThrow(() -> new EntityNotFoundException("Entity not found"));
    // エンティティのプロパティを更新
    return myRepository.save(existingEntity);
}

delete

エンティティを削除するメソッド。

public void delete(Long id) {
    myRepository.deleteById(id);
}

loadUserByUsername

Spring Securityで使用される、ユーザー名を基にユーザーの詳細情報を取得するメソッド。

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    User user = userRepository.findByUsername(username)
            .orElseThrow(() -> new UsernameNotFoundException("User not found"));
    return new org.springframework.security.core.userdetails.User(
            user.getUsername(), user.getPassword(), Collections.singletonList(new SimpleGrantedAuthority("USER")));
}

findAll

全てのエンティティを取得するメソッド。

public List<MyEntity> findAll() {
    return myRepository.findAll();
}

findBy

特定の条件に基づいてエンティティを検索するメソッド。Spring Data JPAを使用する場合にカスタムクエリを定義。

public List<MyEntity> findByStatus(String status) {
    return myRepository.findByStatus(status);
}

【参考】

https://spring.pleiades.io/spring-boot/

Discussion