@Data
@AllArgsConstructor
@NoArgsConstructor
public class Pagination<T> {
private List<T> rows;
private Long total;
}
public <T> Pagination<T> queryPageBySql(String sql, List<Object> params, String countSql, List<Object> countParams, Class<T> clazz, int page, int size) {
Long total = jdbcTemplate.queryForObject(countSql, Long.class, countParams.toArray());
if (total == 0L) {
return new Pagination(new ArrayList<>(), total);
}
StringBuilder querySql = new StringBuilder();
querySql.append(sql);
querySql.append(" limit ");
querySql.append((page - 1) * size);
querySql.append(",");
querySql.append(size);
List<T> rows = jdbcTemplate.query(querySql.toString(), new BeanPropertyRowMapper(clazz), params.toArray());
return new Pagination(rows, total);
}
public <T> Pagination<T> queryPageBySql(String sql, List<Object> params, Class<T> clazz, int page, int size) {
StringBuilder countSql = new StringBuilder();
countSql.append("SELECT COUNT(0) FROM (");
countSql.append(sql);
countSql.append(") table_count");
return queryPageBySql(sql, params, countSql.toString(), params, clazz, page, size);
}