[Spring/스프링] 롤링페이퍼(게시판) 프로젝트 1. Entity 생성]
전편입니다.
“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를 통해 주요 로직들을 구현해보도록 하겠다
'Programming > Spring' 카테고리의 다른 글
[spring/java] JSON 안의 JSON 리스트 객체로 파싱받기 (0) | 2022.07.31 |
---|---|
[Mac/Intellij] Spring + mariaDB 연동 프로젝트 만들기 & 환경셋팅 (0) | 2022.07.06 |
[Spring/스프링] 롤링페이퍼(게시판) 프로젝트 1. Entity 생성 (0) | 2022.03.22 |
[Spring/스프링] 롤링페이퍼(게시판) 프로젝트 0. 프로젝트 설명 (0) | 2022.03.22 |
[Spring/스프링] AOP(Aspect Oriented Programming) 이해하기 (0) | 2022.03.06 |