목록BE (354)
오봉이와 함께하는 개발 블로그
@Query, 리포지토리 메소드에 쿼리 정의하기 메소드에 JPQL 쿼리 작성 @Query("select m from Member m where m.username = :username and m.age = :age") List findUser(@Param("username") String username, @Param("age") int age); @org.springframework.data.jpa.repository.Query 어노테이션을 사용 실행할 메서드에 정적 쿼리를 직접 작성하므로 이름 없는 Named 쿼리라 할 수 있음 JPA Named 쿼리처럼 애플리케이션 실행 시점에 문법 오류를 발견할 수 있음(매우 큰 장점!) 실무에서는 메소드 이름으로 쿼리 생성 기능은 파라미터가 증가하면 메서드 이름..
JPA NamedQuery JPA의 NamedQuery를 호출할 수 있다. @NamedQuery 어노테이션으로 Named 쿼리 정의 @Entity @NamedQuery(name="Member.findByUsername", query="select m from Member m where m.username = :username") public class Member { // ................ } JPA를 직접 사용해서 Named 쿼리 호출 @Repository public class MemberJpaRepository { // .................... public List findByUsername(String username) { return em.createNamedQuery(..
메소드 이름으로 쿼리 생성 메소드 이름을 분석해서 JPQL 쿼리 실행해준다. 이름과 나이를 기준으로 회원을 조회하려면 어떻게 해야 할까? 순수 JPA 리포지토리 public List findByUsernameAndAgeGreaterThan(String username, int age) { return em.createQuery("select m from Member m where m.username = :username and m.age :age", Member.class) .setParameter("username", username) .setParameter("age", age) .getResultList(); } 순수 JPA 테스트 코드 @Test void findByUsernameAndAgeGre..
공통 인터페이스 설정 JavaConfig 설정- 스프링 부트 사용시 생략 가능 @Configuration @EnableJpaRepositories(basePackages = "jpabook.jpashop.repository") public class AppConfig { } 스프링 부트 사용시 @SpringBootApplication 위치를 지정한다.(해당 패키지와 하위 패키지 인식) 만약 위치가 달라지면 @EnableJpaRepositories가 필요하다. 스프링 데이터 JPA가 구현 클래스 대신 생성 org.springframework.data.repository.Repository를 구현한 클래스는 스캔 대상이다. MemberRepository 인터페이스가 동작한 이유임. memberReposito..
예제 도메인 모델과 동작확인 엔티티 클래스 ERD Member 엔티티 @Entity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) @ToString(of = {"id", "username", "age"}) public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String username; private int age; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "team_id") // '일대다'관계에서 '다'가 연관관계 주인이 되어 FK..