@Entity(name="member")
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@IdClass
public class Member{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int mbrNo;
private String id;
private String name;
}
💡 Builder Pattern
객체 설정 시 인자가 많을 경우, 코드 길어짐 + 가독성 떨어짐
이를 해결하고자 Builder Pattern 등장
필요한 객체를 직접 생성하는 대신, 필수 인자 값들을 전달해 Builder 객체를 만듦
💡 DTO와 Entity를 분리하는 이유?
DTO는 View layer을 위한 클래스. Entity는 DB layer을 위한 클래스.
테이블과 매핑되는 Entity 클래스가 변경되면 여러 클래스에 영향을 끼침. View와 통신하는 DTO는 자주 변경되므로, 분리하는게 적절.따라서 View layer과 DB layer 역할을 분리하기 위해서 따로 둔다
public interface PostRepository extends JpaRepository<Post, Long> {
List<Post> findAllByTitleLike(String title);
List<Post> findAllByCreatedDateGreaterThanEqualOrderByIdDesc(LocalDateTime localDateTime);
List<Post> findAllByTagListInOrderByCreatedDateAsc(List<Tag> tagList);
}
@Query("select m from Member m where m.username = :username and m.age = :age")
List<Member> findUser(@Param("username") String username, @Param("age") int age);
@Query("select m from Member m where m.username in :usernames)
List<Member> findUser(@Param("usernames") List<String> usernames);
💡 JPQL (Java Persistence Query Language) ?
JPA에서 관계형 데이터베이스 엔티티에 대한 쿼리를 만들기 위해 사용
SQL문과 문법은 비슷.
차이점은 데이터베이스 테이블에 직접 연결되는 것이 아니라, JPA 엔티티에 대해 동작한다는 점!
따라서 테이블이 아닌, 엔티티명과 엔티티 컬럼의 이름을 사용
@Service
@RequiredArgsConstructor
public class MemberService {
private final MemberRepository memberRepository;
public List<MemberDTO> findAll() {
List<MemberDTO> members = new ArrayList<>();
memberRepository.findAll().forEach(e -> members.add(e));
return members;
}
public Optional<MemberDTO> findById(Long mbrNo) {
Optional<MemberDTO> member = memberRepository.findById(mbrNo);
return member;
}
public void deleteById(Long mbrNo) {
memberRepository.deleteById(mbrNo);
}
public MemberVo save(MemberDTO member) {
memberRepository.save(member);
return member;
}
public void updateById(Long mbrNo, MemberDTO member) {
Optional<MemberDTO> e = memberRepository.findById(mbrNo);
if (e.isPresent()) {
e.get().setMbrNo(member.getMbrNo());
e.get().setId(member.getId());
e.get().setName(member.getName());
memberRepository.save(member);
}
}
}
참고 블로그 :