프로젝트를 할때마다 QueryDsl를 까먹어서 항상 다시 공부를 했었다
프로젝트의 내용들을 적용해보며 마지막으로 복습하자
@Configuration
public class QueryDslConfig {
@PersistenceContext
private EntityManager entityManager;
@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(entityManager);
}
}
public class test {
private final EntityManager entityManager;
private final JPAQueryFactory jpaQueryFactory;
@Autowired
public MyService(EntityManager entityManager) {
this.entityManager = entityManager;
this.jpaQueryFactory = new JPAQueryFactory(entityManager);
}
}
@Repository
public interface ChalletBankRepository extends JpaRepository<ChalletBank, Long> {
List<ChalletBank> findByPhoneNumber(String phoneNumber);
}
@Service
@RequiredArgsConstructor
public class ChalletBankServiceImpl implements ChalletBankService {
private final ChalletBankRepository challetBankRepository;
@Override
public List<AccountInfoResponseDTO> findAccountByPhoneNumber(String phoneNumber) {
List<ChalletBank> challetBanks = challetBankRepository.findByPhoneNumber(phoneNumber);
// 엔티티 리스트를 DTO 리스트로 변환
return challetBanks.stream()
.map(challetBank -> new AccountInfoResponseDTO(
challetBank.getId(),
challetBank.getAccountNumber(),
challetBank.getAccountBalance()
))
.collect(Collectors.toList());
}
}

@Repository
@RequiredArgsConstructor
public class ChalletBankRepositoryImpl implements ChalletBankRepositoryCustom {
private final JPAQueryFactory query;
@Override
public List<AccountInfoResponseDTO> findByAccountInfo(String phoneNumber) {
QChalletBank challetBank = QChalletBank.challetBank;
return query
.select(Projections.constructor(AccountInfoResponseDTO.class,
challetBank.id,
challetBank.accountNumber,
challetBank.accountBalance
))
.from(challetBank)
.where(challetBank.phoneNumber.eq(phoneNumber))
.fetch(); // 여러 결과를 리스트로 반환
}
}
