728x90
순수 JPA Repository 만들기
@Repository
//@RequiredArgsConstructor //이걸 사용해 줄수도 있다.
public class MemberJpaRepository {
private final EntityManager em;
//queryDSL을 사용하기 위한 주입
//동시성 문제는 발생하지 않는다 -> entityManager에 의존하고 있기 때문에
private final JPAQueryFactory queryFactory;
public MemberJpaRepository(EntityManager em,JPAQueryFactory jpaQueryFactory) {
this.em = em;
this.queryFactory = new JPAQueryFactory(em); //스프링 빈으로 등록해도 된다.
//this.queryFactory = jpaQueryFactory;
}
public void save(Member member){
em.persist(member);
}
public Optional<Member> findById(Long id){
Member findMember = em.find(Member.class,id);
return Optional.ofNullable(findMember);
}
public List<Member> findAll(){
return em.createQuery("select m from Member m",Member.class)
.getResultList();
}
public List<Member> findByMemberUsername(String username){
return em.createQuery("select m from Member m where m.username = :username",Member.class)
.setParameter("username",username)
.getResultList();
}
}


- 빈으로 등록하여 사용하여도 된다.
QueryDsl로 JPARepository 변경


참고
동시성 문제는 걱정하지 않아도 된다. 왜냐하면 여기서 스프링이 주입해주는 엔티티 매니저는 실제 동작 시점에 진짜 엔티티 매니저를 찾아주는 프록시용 가짜 엔티티 매니저이다. 이 가짜 엔티티 매니저는 실제 사용 시점에 트랜잭션 단위로 실제 엔티티 매니저(영속성 콘텍스트)를 할당해준다. > 더 자세한 내용은 자바 ORM 표준 JPA 책 13.1 트랜잭션 범위의 영속성 컨텍스트를 참고하자.
728x90
'실전! Querydsl' 카테고리의 다른 글
| Ch04. 실무 활용(순수 JPA와 Querydsl) - 조회 API 컨트롤러 개발 (0) | 2022.01.01 |
|---|---|
| Ch04. 실무 활용(순수 JPA와 Querydsl) - 동적 쿼리와 성능 최적화 조회(Builder 사용, Where절 파라미터 사용) (0) | 2022.01.01 |
| Ch03. 중급 문법 - SQL function 호출하기 (0) | 2021.12.31 |
| Ch03. 중급 문법 - 수정, 삭제 벌크 연산 (0) | 2021.12.31 |
| Ch03. 중급 문법 - 동적 쿼리(BooleanBuilder 사용) (0) | 2021.12.31 |