Spring/spring_old

05. repository mapstore 구현

slow333 2023. 1. 19. 16:06

초기 구성은 application context를 통해 <bean>을 통해 개별적으로 등록하는 방식으로 해보고,

이후에는 <context:component-scan ...>과 annotation을 사용함

최종적으로 spring boot를 하면 application context도 필요없음

/resources/applicationcontext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
        http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

<!--  아래의 정보를 보고 IOC container가 생성 시점에 객체를 생성(IoC Bean factory에서)
      Spring 2 시절에 사용하던 것 
    <bean id="clubStore" class="spring.study.repository.mapstore.ClubMapStore" />
    <bean id="clubService" class="spring.study.service.servicelogic.ClubServiceLogic" >
        <constructor-arg ref="clubStore" />
    </bean>
-->
<!-- 위 방식처럼 일일이 등록하지 않고 특정 패키지 부터 찾아라
     이를 위해서는 bean으로 사용될 class에 annotation을 지정해야함
     이대로 하면 class 이름이 나타남(이름 지정) -->
    <context:component-scan base-package="spring.study"/>
</beans>

<!--이전에 사용하던 DI 주입을 위한 XML 파일 등록 방식
    이전 방식으로 참조용으로 한번 해봄 => 실제로는 이후에 Spring boot를 활용해서 주입할 것임
    중간에 context:component-scan 를 활용한 등록 방식도 해봄
    -->

DB와 연계해서 데이터를 읽고 쓸 객체를 생성(현재는 Map에 저장함 -> 나중에 DB로 변경)

ClubMapStore와 MemberMapStore를 구성(LinkedHashMap에 데이터 저장)

 

기본적인 DB에 접속해서 CRUD를 구현하는 과정으로 좀더 세부적인 내용은 이후 service logic에서 처리함

 

ClubMapStore 내용을 갖고 ClubServiceLogic 에서 내용을 구현함

@Repository("clubStore")
public class ClubMapStore implements ClubStore {

  private Map<String, Club> clubMap;

  public ClubMapStore(){
    this.clubMap = new LinkedHashMap<>();
  }


  @Override
  public String create(Club club) {
    clubMap.put(club.getId(), club);
    return club.getId();
  }

  @Override
  public List<Club> findByName(String clubName) {

    return clubMap.values()
            .stream()
            .filter(club -> club.getName().equals(clubName))
            .collect(Collectors.toList());
  }

  @Override
  public Optional<Club> findById(String clubId) {
    return Optional.ofNullable(clubMap.get(clubId));
  }

  @Override
  public List<Club> findByNameContaining(String clubName) {
    return clubMap.values()
            .stream()
            .filter(club -> club.getName().contains(clubName))
            .collect(Collectors.toList());
  }

  @Override
  public List<Club> findAll() {
    return new ArrayList<Club>(clubMap.values());
  }

  @Override
  public void update(Club club) {
    clubMap.put(club.getId(), club);
  }

  @Override
  public void delete(String clubId) {
    clubMap.remove(clubId);
  }

  @Override
  public boolean exists(String clubId) {
//    return clubMap.containsKey(clubId);
    return Optional.ofNullable(clubMap.get(clubId)).isPresent();
  }
}

 

@Repository
public class MemberMapStore implements MemberStore {

  private final Map<String, Member> memberMap;

  public MemberMapStore(){
    this.memberMap = new LinkedHashMap<>();
  }

  @Override
  public String create(Member member) {
    memberMap.put(member.getId(), member);
    return member.getId();
  }

  @Override
  public Optional<Member> findById(String memberId) {
    return Optional.ofNullable(memberMap.get(memberId));
  }

  @Override
  public Optional<Member> findByEmail(String memberEmail) {
    return memberMap.values()
            .stream()
            .filter(m -> m.getEmail().equals(memberEmail))
            .findAny();
  }

  @Override
  public List<Member> findByName(String memberName) {

    return memberMap.values()
            .stream()
            .filter(member -> member.getName().equals(memberName))
            .collect(Collectors.toList());
  }

  @Override
  public List<Member> findByNameContaining(String memberName) {
    return memberMap.values()
            .stream()
            .filter(member -> member.getName().contains(memberName))
            .collect(Collectors.toList());
  }

  @Override
  public List<Member> findAll() {
    return new ArrayList<>(memberMap.values());
  }

  @Override
  public void update(Member member) {
    memberMap.put(member.getId(), member);
  }

  @Override
  public void delete(String memberId) {
    memberMap.remove(memberId);
  }

  @Override
  public boolean exists(String memberId) {
    return memberMap.containsKey(memberId);
  }
}

membership은 나중에 구현