工具代码
@Component
public class JdbcTemplatePageUtils {
@Autowired
JdbcTemplate jdbcTemplate;
/**
* 返回单个dto
*
* @param sql 查询sql
* @param queryArgs 查询参数
* @param rowMapper dto mapper
* @param <T> dto
* @return dto
*/
public <T> T getCustomerDto(String sql, RowMapper<T> rowMapper, Object[] queryArgs) {
return jdbcTemplate.queryForObject(sql, rowMapper, queryArgs);
}
/**
* 返回dto列表
*
* @param sql 查询sql
* @param queryArgs 查询参数
* @param rowMapper dto mapper
* @param <T> dto
* @return dto list
*/
public <T> List<T> getCustomerDtoList(String sql, RowMapper<T> rowMapper, Object[] queryArgs) {
return jdbcTemplate.query(sql, rowMapper, queryArgs);
}
/**
* 返回分页对象
*
* @param sql 查询sql
* @param queryArgs 查询参数
* @param rowMapper dto mapper
* @param countSql 总量sql
* @param countArgs 总量参数
* @param page 当前页
* @param size 每页大小
* @param <T> dto
* @return 分页对象
*/
public <T> PageBean<T> getCustomerPageDto(String sql, Object[] queryArgs, RowMapper<T> rowMapper, String countSql,
Object[] countArgs, int page, int size) {
if (page <= 0) {
throw new RuntimeException("当前页数必须大于1");
}
if (size <= 0) {
throw new RuntimeException("每页大小必须大于1");
}
// 总共数量
int totalSize = jdbcTemplate.queryForObject(countSql, Integer.class, countArgs);
if (totalSize == 0) {
PageBean<T> bean = new PageBean<T>();
bean.setContent(new ArrayList<T>());
bean.setElementTotalSize(0);
bean.setPage(0);
bean.setSize(0);
bean.setTotalPage(0);
bean.setTotalSize(0);
return bean;
}
// 总页数
int totalPage = totalSize % size == 0 ? totalSize / size : totalSize / size + 1;
// 开始位置
int offset = (page - 1) * size;
// return item size
int limit = size;
sql = sql + " limit " + limit + " offset " + offset;
List<T> content = jdbcTemplate.query(sql, rowMapper, queryArgs);
PageBean<T> bean = new PageBean<T>();
bean.setContent(content);
bean.setElementTotalSize(content.size());
bean.setPage(page);
bean.setSize(size);
bean.setTotalPage(totalPage);
bean.setTotalSize(totalSize);
return bean;
}
}
Bean代码
public class PageBean<T> {
private List<T> content; //内容列表
private int size ; //每页大小
private int elementTotalSize; //list中元素有多少个
private int page; //当前页数
private int totalPage; //总的页数
private int totalSize; //总共的数量
public List<T> getContent() {
return content;
}
public void setContent(List<T> content) {
this.content = content;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public int getElementTotalSize() {
return elementTotalSize;
}
public void setElementTotalSize(int elementTotalSize) {
this.elementTotalSize = elementTotalSize;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getTotalSize() {
return totalSize;
}
public void setTotalSize(int totalSize) {
this.totalSize = totalSize;
}
@Override
public String toString() {
return "PageBean [content=" + content + ", size=" + size
+ ", elementTotalSize=" + elementTotalSize + ", page=" + page
+ ", totalPage=" + totalPage + ", totalSize=" + totalSize + "]";
}
}