순수 JPA 사용하기
순수 JPA를 사용하여 MemberJpaRepository를 구현합니다
@Repository
public class MemberJpaRepository {
private final EntityManager em;
private final JPAQueryFactory queryFactory;
public MemberJpaRepository(EntityManager em) {
this.em = em;
this.queryFactory = new JPAQueryFactory(em);
}
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> findByUsername(String username) {
return em.createQuery("select m from Member m where m.username = :username", Member.class)
.setParameter("username", username)
.getResultList();
}
}
em.createQuery()를 통해서 SQL문을 만들고, parameter를 바인딩시킵니다.
QueryDsl로 개선하기
이제 Querydsl로 개선시킵니다.
//1.findAll
public List<Member> findAll() {
return em.createQuery("select m from Member m", Member.class)
.getResultList();
}
public List<Member> findAll_Querydsl() {
return queryFactory
.selectFrom(member)
.fetch();
}
//2.findByUsername
public List<Member> findByUsername(String username) {
return em.createQuery("select m from Member m where m.username = :username", Member.class)
.setParameter("username", username)
.getResultList();
}
public List<Member> findByUsername_Querydsl(String username) {
return queryFactory
.selectFrom(member)
.where(member.username.eq(username))
.fetch();
}
JPAQueryFactory를 빈으로 따로 등록이 가능합니다.
JPAQueryFactory가 Bean으로 등록되어 생성자에서 빈 주입을 받아서 사용할 수 있습니다.
//1. 변경 전
public MemberJpaRepository(EntityManager em) {
this.em = em;
this.queryFactory = new JPAQueryFactory(em);
}
//2. 변경 후
public MemberJpaRepository(EntityManager em, JPAQueryFactory queryFactory) {
this.em = em;
this.queryFactory = queryFactory;
}
* 출처
Inflearn : 실전! Querydsl 강의
반응형
'Spring > Querydsl' 카테고리의 다른 글
스프링 데이터와 Querydsl (0) | 2022.02.13 |
---|---|
QueryDsl 수정, 삭제 (0) | 2022.02.13 |
Querydsl 동적쿼리 (0) | 2022.02.13 |
QueryDsl 프로젝션 문법 (0) | 2022.02.13 |
QueryDsl 기본문법 (0) | 2022.02.12 |