使用JdbcTemplate实现分页查询

590 阅读1分钟
@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);
}