Springboot単純メンバーライブラリの作成


この投稿は、インフラストラクチャ「Spring入門-コード学習のSpring Boot、Web MVC、DBアクセステクノロジー」コースで個人学習のために作成されました.

典型的なWebアプリケーション階層


コントローラ:Web MVCのコントローラロール
サービス:コアビジネスロジック実装ex)メンバーは重複して参加できません.
≪リポジトリ|Library|oem_src≫:データベースにアクセスし、ドメイン・オブジェクトをデータベースに保存して管理します.
≪ドメイン|Domain|emdw≫:主にビジネス・ドメイン・オブジェクトをデータベースに格納および管理します.

リポジトリをインタフェースとして設計する場合は、後でデータ・リポジトリを選択し、実装クラスを変更できます.
このインタフェースは会員ストレージ、会員id、氏名検索機能を実現する.
実際の実装体はMemoryMemberRepositoryである.
✔MemberRepository.java
package hello.hellospring.repository;

import hello.hellospring.controller.domain.Member;
import java.util.List;
import java.util.Optional;

public interface MemberRepository {
    Member save(Member member); //회원 저장 후 반환
    Optional<Member> findById(Long id); //null일경우 처리하기 위해 optional사용
    Optional<Member> findByName(String name);
    List<Member> findAll(); //저장된 모든 회원 리스트 반환
}
✔MemoryMemberRepository.java
package hello.hellospring.repository;

import hello.hellospring.controller.domain.Member;
import java.util.*;

//MemberRepository를 implements해야한다.
public class MemoryMemberRespository implements MemberRepository {
    private static Map<Long,Member> store=new HashMap<>();
    private static long sequence =0L;

    @Override
    public Member save(Member member) {
        member.setId(++sequence); //id 세팅시 sequence값 하나 올려주기
        store.put(member.getId(), member); //Map에 저장
        return member; //저장된 결과 반환
    }

    @Override
    public Optional<Member> findById(Long id) {
        return Optional.ofNullable(store.get(id)); //결과가 null일수 있으니 ofNullable 사용
    }

    @Override
    public Optional<Member> findByName(String name) {
        return store.values().stream().filter(member->member.getName().equals(name)).findAny();
        //member.getname이 파라미터로 넘어온 name이랑 같은지 확인 후 같으면 반환
        //findAny()로 하나 찾을때까지 찾기
    }

    @Override
    public List<Member> findAll() {
        return new ArrayList<>(store.values()); 
    }
}
上記のコードprivate静的Mapstore=new HashMap<>()では,HashMap()は単純な例示的な関数であり,実際の動作では同期性の問題で共有される変数であればAtomicLongなどのタイプを用いる.これは去年オペレーティングシステムの授業で学んだ部分です.マルチスレッドからキーセクションにアクセスする場合は、排他的アクセスである反発アクセスを排除します.
これらの内容に関する関数でしょう面白いはやっぱり理論より実戦.