@Service
@Transactional(readOnly = true) // join, private 메서드 제외하고 readOnly true속성을 가짐
//@AllArgsConstructor // 모든 필드를 가지고 생성자를 만들어줌
@RequiredArgsConstructor // final이나 @NonNull인 필드 값만 파라미터로 받는 생성자 만듦
public class MemberService {
private final MemberRepository memberRepository;
// public MemberService(MemberRepository memberRepository) {
// this.memberRepository = memberRepository;
// }
/**
* 회원가입
*/
@Transactional
// 우선권을 가지기에 readOnly true가 아님, 기본값 readOnly false
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);
}
}
[ Lombok 기능임 ]
@NoArgsConstructor : 파라미터가 없는 기본 생성자를 만듦
@AllArgsConstructor : 모든 필드를 가지고 생성자를 만들어줌
@RequiredArgsConstructor : final이나 @NonNull인 필드 값만 파라미터로 받는 생성자 만듦
트랜잭션의 성질 4가지
1. 원자성
한 트랜잭션 내에서 실행한 작업들은 하나의 단위로 처리. 즉 모두 성공 또는 모두 실패
2. 일관성
트랜잭션은 일관성 있는 데이터베이스 상태를 유지(data integrity 만족 등)
3. 격리성
동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리해야한다.
4. 영속성
트랜잭션을 성공적으로 마치면 결과가 항상 저장되어야 함
'백엔드개발자 > SPRING, JPA 등...' 카테고리의 다른 글
@valid , BindingResult (0) | 2022.02.14 |
---|---|
관계형 db (1:1 /1:N / N:M) (0) | 2022.02.14 |
cascade , 연관관계 메서드 (0) | 2022.02.13 |
@Embedded, @Embeddable, @Enumerated (0) | 2022.02.05 |
@Inheritance, @DiscriminatorColumn, @DiscriminatorValue (0) | 2022.01.28 |