본문 바로가기
Spring/Querydsl

순수 JPA와 Querydsl

코동이 2022. 2. 13.

순수 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