본문 바로가기
반응형

JPA14

JPA 를 공부하면서 알게 된 내용 정리 3 Spring Data JPA - 2편 사용자 정의 리포지토리 구현 public interface MemberRepositoryCustom { List findMemberCustom(); } @RequiredArgsConstructor public class MemberRepositoryImpl implements MemberRepositoryCustom { private final EntityManager em; @Override public List findMemberCustom() { return em.createQuery("select m from Member m ", Member.class) .getResultList(); } } 위처럼 Custom 인터페이스를 만들어 두고, 기존의 Reposit.. 2022. 2. 2.
JPA 를 공부하면서 알게 된 내용 정리 2 Spring Data JPA - 1편 인터페이스만 있고 구현체는 없는데 어떻게 동작하는거지? Spring Data JPA 가 구현 클래스를 대신 만들어 주기 때문에 동작하는 것이다. 실제로 해당 인터페이스의 클래스를 출력해보면 프록시가 나온다. memberRepository.getClass(); => class com.sun.proxy.$ProxyXXX 또한 @Repository를 생략할 수 있다. 컴포넌트 스캔을 스프링 데이터 JPA 가 자동으로 처리 JPA 예외를 스프링 예외로 변환하는 과정도 자동으로 처리 파라미터가 3개 이상이면... 메서드 명을 통해서 쿼리를 자동 생성해주는 기능은 정말 편하다. 하지만 조건이 많아지만 메서드 명이 너무 길어지는 문제가 있다. 영한님은 파라미터가 2개를 넘어가거나.. 2022. 1. 29.
JPA 를 공부하면서 알게 된 내용 정리 1 JPA 를 학습하면서 알게 된 내용을 정리해보았다. 🎯 컨트롤러에서 엔티티를 반환하지 마라 API 를 만들때는 절대로 엔티티를 외부로 반환하면 안된다. 만약 Member 엔티티 속성으로 name 과 password 가 추가된다면, 2가지 문제가 발생한다. 패스워드가 그대로 노출되는 문제가 있다. API 스팩이 변한다. 따라서 MemberRequestDto, MemberResponseDto 등의 DTO로 변환해서 넘기는 것이 좋다. 🎯 클래스 내 필드 직접 접근 VS getter() 를 통한 접근 클래스 내에서는 getter 를 호출하는 것보다 필드를 직접 호출하는 것이 코드가 더 깔끔하다. 그래서 필드에 직접 접근하는 방법을 주로 사용한다. 하지만,, JPA 프록시를 많이 다루게 되면 이 부분이 중요해지.. 2022. 1. 26.
다양한 연관관계 매핑 프로젝트 실습을 하면서 연관관계 매핑을 자주 하기는 했지만, 보통 1대다 다대1 관계를 많이 썼고 나머지는 잘 쓰지 않았다. 따라서 해당 개념에 대해 제대로 익히기 위해서 실습을 통해 학습해 봤다. 실습 해보기 간단한 쇼핑 페이지의 연관 관계이다. 모든 연관관계를 학습할 수 있어 정말 좋은 예제라고 생각한다. 주문과 상품은 다대다 관계로 풀어내기 위해 주문 상품이라는 중간 테이블을 두어서 일대다, 다대일 관계로 풀어냈다. 참고 !! 연관관계 매핑 시 고려해야 될 사항 다중성 (1대 다..) 단방향, 양방향 연관관계의 주인 연관관계를 매핑할 때는 먼저 두 엔티티가 일대다 관계인지, 일대일 관계인지 다중성을 알아야 한다. 그 후 한 쪽만 참조하는 단방향 관계인지, 양 쪽 모두 참조하는 양방향 관계인지를 확인.. 2020. 4. 9.
연관관계 매핑 기초 객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다. - 조영호 님 객체를 테이블에 맞추어 모델링 외래 키 식별자를 직접 다룸 생성할 때 Team team = new Team(); Member member = new Member(); member.setTeamId(team.getId()); 조회할때 Member findMember = em.find(Member.class, member.getId()); Long findTeamId = findMember.getTeamId(); Team findTeam = em.find(Team.class, findTeamId); 위 방식은 필요할 때 마다 DB에서 계속 꺼내야 한다. 객체지향 스럽지가 않다.. 객체를 테이블에 맞추어 데이터 중심으로 모델.. 2020. 4. 6.
엔티티 매핑 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn 객체와 테이블 매핑 @Entity JPA가 관리하는 클래스, 엔티티라고 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 주의점 기본 생성자 필수 final 클래스, enum, interface, inner 클래스 사용 X DB에 저장할 필드에 final 사용 X @Table 엔티티와 매핑 할 테이블 지정 데이터베이스 스키마 자동 생성 DDL을 애플리케이션 실행 시점에 자동 생성해 준다. 필자는 학원에 다닐 때 항상 이것을 이용해서 스키마를 자동 생성했었는데, 사실 이것은 개발 서버에서만 사용해야 한다는 것을 알게.. 2020. 4. 6.