CONTRLLOE
@GetMapping("findByCondition")
public ResponseEntity findByCondition(@ModelAttribute PaymentEntity paymentEntity, @RequestParam int page, @RequestParam int size) {
Page result = paymentFacade.findByCondition(paymentEntity, page, size);
return ResponseEntity.ok(result);
}
IMP
public interface PaymentFacade {
Page findByCondition(PaymentEntity paymentEntity, int page, int size);
}
IMPL
@Override
public Page findByCondition(PaymentEntity paymentEntity, int page, int size) {
StringBuilder sb = new StringBuilder();
StringBuilder condition = new StringBuilder();
StringBuilder sum = new StringBuilder();
sb.append("select e.* from payment e left join state_machine s on e.id =s.machine_id where 1=1 ");
sum.append("select count(1) from payment e left join state_machine s on e.id =s.machine_id where 1=1 ");
if (paymentEntity.getStartDate() != null ) {
condition.append(" and e.start_date >= '"+ DateUtils.format(paymentEntity.getStartDate(),"yyyy-MM-dd")+"' ");
}
if (paymentEntity.getEndDate() != null ) {
condition.append(" and e.end_date <= '"+ DateUtils.format(paymentEntity.getEndDate(),"yyyy-MM-dd")+"' ");
}
if (StringUtils.isNotBlank(paymentEntity.getPaymentNo())) {
condition.append(" and e.payment_no like '%" + paymentEntity.getPaymentNo() + "%'");
}
if (StringUtils.isNotBlank(paymentEntity.getState())) {
condition.append(" and s.state = '" + paymentEntity.getState() + "'");
}
if (StringUtils.isNotBlank(paymentEntity.getCustomerId())) {
condition.append(" and s.customer_id = '" + paymentEntity.getCustomerId() + "'");
}
if (StringUtils.isNotBlank(paymentEntity.getSupplyOrgId())) {
condition.append(" and s.supply_org_id = '" + paymentEntity.getSupplyOrgId() + "'");
}
sum.append(condition);
sb.append(condition).append(" order by id desc limit " + (page) * size + "," + size);
int count = ((BigInteger) entityManager.createNativeQuery(sum.toString()).getSingleResult()).intValue();
if (count < 1) {
return null;
}
Query query = entityManager.createNativeQuery(sb.toString(), PaymentEntity.class);
PageRequest pageRequest = PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "id"));
List<PaymentEntity> list = query.getResultList();
return new PageImpl<PaymentEntity>(list, pageRequest, count);
}
TEST