스프링 데이터 JPA - MemberRepository 생성

public interface MemberRepository extends JpaRepository<Member, Long> {

	List<Member> findByUsername(String username);

}

사용자 정의 리포지토리


사용자 정의 리포지토리 구성

사용자 정의 인터페이스 작성

public interface MemberRepositoryCustom {

	List<MemberTeamDto> search(MemberSearchCondition condition);

}

사용자 정의 인터페이스 구현

public class MemberRepositoryImpl implements MemberRepositoryCustom {

	private final JPAQueryFactory queryFactory;

	public MemberRepositoryImpl(EntityManager em) {
		this.queryFactory = new JPAQueryFactory(em);
	}

	@Override
	//회원명, 팀명, 나이(ageGoe, ageLoe)
	public List<MemberTeamDto> search(MemberSearchCondition condition) {
		return queryFactory
						.select(new QMemberTeamDto(
										member.id.as("memberId"),
										member.username,
										member.age,
										team.id.as("teamId"),
										team.name.as("teamName")))
						.from(member)
						.leftJoin(member.team, team)
						.where(usernameEq(condition.getUsername()),
										teamNameEq(condition.getTeamName()),
										ageGoe(condition.getAgeGoe()),
										ageLoe(condition.getAgeLoe()))
						.fetch();
	}

	private BooleanExpression usernameEq(String username) {
		return isEmpty(username) ? null : member.username.eq(username);
	}

	private BooleanExpression teamNameEq(String teamName) {
		return isEmpty(teamName) ? null : team.name.eq(teamName);
	}

	private BooleanExpression ageGoe(Integer ageGoe) {
		return ageGoe == null ? null : member.age.goe(ageGoe);
	}

	private BooleanExpression ageLoe(Integer ageLoe) {
		return ageLoe == null ? null : member.age.loe(ageLoe);
	}

}

스프링 데이터 리포지토리에 사용자 정의 인터페이스 상속

public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom {

	List<Member> findByUsername(String username);

}

스프링 데이터 페이징 활용1 - Querydsl 페이징 연동


사용자 정의 인터페이스에 페이징 2가지 추가