Programming/Spring

[Spring/스프링] 롤링페이퍼(게시판) 프로젝트 2. Repository 생성

예민한고라니 2022. 3. 23. 12:50

[Spring/스프링] 롤링페이퍼(게시판) 프로젝트 1. Entity 생성]

 

[Spring/스프링] 롤링페이퍼(게시판) 프로젝트 1. Entity 생성

https://coding-zzang.tistory.com/18 [Spring/스프링] 롤링페이퍼 프로젝트 0. 프로젝트 설명 "온라인 롤링페이퍼 사이트를 만들어볼까...?" Spring공부를 시작할때 쯔음 , 작은 프로젝트를 만들어보면 좋을 것.

coding-zzang.tistory.com

 

전편입니다.


“JPA  EntityManager”

본 프로젝트에서는 대표적인 ORM방식의 프레임워크인 JPA를 사용할 것이다.

우선 JPA에서 제공하는 Entity Manager에 대해 설명해보겠다

 

EntityManager

  • entity객체들을 영속성 컨텍스트 (Persistence Context)에 집어넣어
  • 엔티티들을 영구 저장하여 관리한다.
  • 그렇게 영속성이 부여된 데이터들은 동일성이 보장된다!
  • , 아래의 두코드에서 반환되는 데이터는 1이라는 id값을 가진 같은 데이터이다.
return em.find(Paper.class, 1);
return em.find(Paper.class, 1);

 

  • em.persist( )를 이용하여 영속 상태로 만들 수 있고
  • em.find( )를 이용하여 조회할 수 있으며
  • em.createQuery( )를 활용하여 복잡한 조건의 데이터를 요청할 수 있다.

이제 코드를 보자

 

1. MemberRepository

@Repository
public class MemberRepository {

    @PersistenceContext
    private EntityManager em;

    public void save(Member member){
        em.persist(member);
    }

    public Member findOne(Long id){
        return em.find(Member.class, id);
    }

    public List<Member> findByName(String name){
        return em.createQuery("select m from Member m where m.name =: name", Member.class)
                .setParameter("name",name)
                .getResultList();
    }

    public List<Member> findAll() {
        return em.createQuery("select m from Member m", Member.class)
                .getResultList();
    }
}

 

2. PaperRepository

@Repository
@RequiredArgsConstructor
public class PaperRepository {

    private final EntityManager em;

    public void save(Paper paper){
        em.persist(paper);
    }

    public Paper findOne(Long id){
        return em.find(Paper.class,id);
    }

    public List<Paper> findAll() {
        return em.createQuery("select p from Paper AS p", Paper.class)
                .getResultList();
    }

    public List<Paper> findAllByName(PaperSearch paperSearch) {
        String jpql = "select p From Paper As p join p.member m";
        boolean isFirstCondition = true;

        //회원 이름 검색
        if (StringUtils.hasText(paperSearch.getMemberName())) {
            if (isFirstCondition) {
                jpql += " where";
                isFirstCondition = false;
            } else {
                jpql += " and";
            }
            jpql += " m.name like :name";
        }
        TypedQuery<Paper> query = em.createQuery(jpql, Paper.class)
                .setMaxResults(1000); //최대 1000건

        if (StringUtils.hasText(paperSearch.getMemberName())){
            query = query.setParameter("name", paperSearch.getMemberName());
        }
        return query.getResultList();
    }
}

 

3. CommentRepository

@Repository
@RequiredArgsConstructor
public class CommentRepository {

    private final EntityManager em;

    public void save(Comment comment){
        em.persist(comment);
    }
}

'''Comment의 경우 아직 기능이 완벽하게 구현되지 않아서 짧다. 필요시 추후에 다시 추가하도록 하겠다'''

 

다음에는 Service를 통해 주요 로직들을 구현해보도록 하겠다