package jpabook.jpashop.domain.repository;
import jpabook.jpashop.domain.Member;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import java.util.List;
@Repository // ์ปดํฌ๋ํธ ์ค์บ์ ๋์์ด ๋์ด ์คํ๋ง ๋น์ผ๋ก ์๋ ๋ฑ๋ก๋จ
@RequiredArgsConstructor
public class MemberRepository {
private final EntityManager em; // ์คํ๋ง์ด ์ํฐํฐ ๋งค๋์ ๋ฅผ ๋ง๋ค์ด์ ์ฌ๊ธฐ์ ์ธ์ ์
public void save(Member member){
em.persist(member);
}
public Member findOne(Long id){
return em.find(Member.class, id);
}
public List<Member> findAll(){
return em.createQuery("select m from Member m", Member.class)
.getResultList();
}
public List<Member> findByName(String name){
return em.createQuery("select m from Member m where m.name = :name", Member.class)
.setParameter("name", name)
.getResultList();
}
}
๊ธฐ์ ์ค๋ช
@Repository : ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก, JPA ์์ธ๋ฅผ ์คํ๋ง ๊ธฐ๋ฐ ์์ธ๋ก ๋ณํ
@PersistenceContext : ์ํฐํฐ ๋งค๋์ (Entitymanager) ์ฃผ์
@PersistenceUnit: ์ํฐํฐ ๋งค๋์ ํฉํ ๋ฆฌ(EntitymanagerFactory) ์ฃผ์
๊ธฐ๋ฅ ์ค๋ช
save() : ํ์ ์ ๋ณด ์ ์ฅ
findOne() : ํ์ ์ ๋ณด PK๊ฐ์ผ๋ก 1๊ฐ ๋ฐ์ดํฐ ์ฐพ๊ธฐ
findAll() : ๋ชจ๋ ํ์ ์ ๋ณด List๋ก ๋ฐํ
findByName() : ํ์ ์ ๋ณด name๊ฐ์ผ๋ก 1๊ฐ ๋ฐ์ดํฐ ์ฐพ๊ธฐ
package jpabook.jpashop.service;
import jpabook.jpashop.domain.Member;
import jpabook.jpashop.repository.MemberRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@Transactional(readOnly = true)
public class MemberService {
@Autowired
MemberRepository memberRepository;
/**
* ํ์๊ฐ์
*/
@Transactional //๋ณ๊ฒฝ
public Long join(Member member) {
validateDuplicateMember(member); //์ค๋ณต ํ์ ๊ฒ์ฆ
memberRepository.save(member);
return member.getId();
}
private void validateDuplicateMember(Member member) {
List<Member> findMembers =
memberRepository.findByName(member.getName());
if (!findMembers.isEmpty()) {
throw new IllegalStateException("์ด๋ฏธ ์กด์ฌํ๋ ํ์์
๋๋ค.");
}
}
/**
* ์ ์ฒด ํ์ ์กฐํ
*/
public List<Member> findMembers() {
return memberRepository.findAll();
}
public Member findOne(Long memberId) {
return memberRepository.findOne(memberId);
}
}
<aside>
โ ๏ธ @RequiredArgsConstructor ์ ๋
ธํ
์ด์
์ final์ด ๋ถ์ ํ๋๋ง ๊ฐ์ง๊ณ ์์ฑ์๋ฅผ ๋ง๋ค์ด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค. setter ์ฃผ์
, constructor ์ฃผ์
, Autowired ์ฃผ์
๋ฑ์ ๋ฐฉ๋ฒ๋ณด๋ค ๋ ๊ฐํธํ๋ค.
</aside>
๊ธฐ์ ์ค๋ช
@Service
@Transactional : ํธ๋์ญ์
, ์์์ฑ ์ปจํ
์คํธ