目录
一、分页接口 Page.java
/**
* 分页接口
* <p></p>
* Created on 2017/10/30.
*/
public interface Page<T> {
/**获取当前页码*/
int getPageNo();
/**获取当前页大小*/
int getPageSize();
/**获取总记录*/
int getTotalCount();
/*** 获取总页数*/
int getTotalPage();
/**获取当前页数据*/
List<T> getData();
/** 是否有下一页*/
boolean hasNextPage();
/** 是否有上一页*/
boolean hasPreviousPage();
/**上一页*/
int getNextPage();
/**下一页*/
int getPreviousPage();
/** mysql专用,获取数据偏移量
* <p></p>
* @return long mysql记录开始位置
*/
long getOffset();
}
二、实现page接口 Pagination.java
/**
* 分页对象,实现page接口
* <p></p>
* Created by tanwei3 on 2017/10/30.
*/
public class Pagination<T> implements Page<T>, Serializable {
private static final long serialVersionUID = -300961120216439654L;
/** 默认第一页*/
private static final int DEFAULT_PAGE_NO = 1;
/** 默认页大小*/
private static final int DEFAULT_PAGE_SIZE = 10;
/**当前页码,默认第一页*/
private int pageNo = DEFAULT_PAGE_NO;
/** 页大小*/
private int pageSize = DEFAULT_PAGE_SIZE;
/** 总记录数*/
private int totalCount = 0;
/**当前页数据*/
private List<T> data;
public Pagination() {
}
public Pagination(Integer pageNo, Integer pageSize) {
this.pageNo = pageNo;
this.pageSize = pageSize;
}
public void setPageNo(Integer pageNo) {
this.pageNo = pageNo;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public void setTotalCount(Integer totalCount) {
this.totalCount = totalCount;
}
public void setData(List<T> data) {
this.data = data;
}
@Override
public long getOffset() {
return (long) (getPageNo()- 1) * pageSize;
}
@Override
public int getPageNo() {
return pageNo;
}
@Override
public int getPageSize() {
return pageSize;
}
@Override
public int getTotalCount() {
return totalCount;
}
@Override
public int getTotalPage() {
if(getPageSize()>0){
return (getTotalCount() / getPageSize() + (getTotalCount() % getPageSize() == 0 ? 0 : 1));
}else{
return 0;
}
}
@Override
public List<T> getData() {
return data;
}
@Override
public boolean hasNextPage() {
return pageNo < getTotalPage();
}
@Override
public boolean hasPreviousPage() {
return pageNo > 1;
}
@Override
public int getNextPage() {
return (this.getPageNo() >= this.getTotalPage())?this.getTotalPage():this.getPageNo() + 1;
}
@Override
public int getPreviousPage() {
return (this.getPageNo() <= 1)?1:this.getPageNo() - 1;
}
}
三、编写分页请求 PageRequest.java
使用方法 : 请求patamDTO extends PageRequest
/**
* 分页查询请求,兼容以前的PageQuery
* <p></p>
* Created by on 2017/11/23.
*/
public class PageRequest implements Serializable {
private static final long serialVersionUID = 4701209877284326452L;
/**
* 当前页号(同page),从1开始
*/
private int index = 1;
/**
* 每页大小,默认10
*/
private int pageSize = 10;
/**
* orderBy语句
*/
private String orderByClause;
/**
* 获取当前页号,同getPage
* @return int 页号
*/
public int getIndex() {
return index;
}
/**
* 设置当前页号,同setPage
* @param index 当前页号
*/
public void setIndex(int index) {
this.index = index;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public String getOrderByClause() {
return orderByClause;
}
public void setOrderByClause(String orderByClause) {
this.orderByClause = orderByClause;
}
/**
* mysql专用,获取数据偏移量
* <p></p>
* @return long mysql记录开始位置
*/
public long getOffset() {
return (long) (index - 1) * pageSize;
}
//===============================以下方法辅助类,用于兼容老代码============================
/**
* 获取当前页号,同getIndex
* @return int 页号
*/
public int getPage() {
return index;
}
/**
* 设置当前页号,同setIndex
* @param page 当前页号
*/
public void setPage(int page) {
this.index = page;
}
/**
* mysql专用,获取数据偏移量,同getOffset
* <p></p>
* @return long mysql记录开始位置
*/
public long getStartRow() {
return getOffset();
}
}
四、使用分页:
Pagination<EnumTypeDetailDto> enumTypeDetailPage(EnumTypeDetailDto enumTypeDetailDto)
五、分页的使用接口实现
public Pagination<EnumTypeDetailDto> enumTypeDetailPage(EnumTypeDetailDto enumTypeDetailDto) {
Integer totalCount = enumTypeDetailMapper.totalCount(enumTypeDetailDto);
logger.info("EnumTypeDetailServiceImpl-->enumTypeDetailPage,totalCount={}", totalCount);
List<EnumTypeDetailDto> enumTypeDetailDtoList = enumTypeDetailMapper.enumTypeDetailPage(enumTypeDetailDto);
logger.info("EnumTypeDetailServiceImpl-->enumTypeDetailPage,enumTypeDetailDtoList={}", JsonUtil.toJSONString(enumTypeDetailDtoList));
Pagination<EnumTypeDetailDto> page = new Pagination();
page.setPageSize(enumTypeDetailDto.getPageSize());
page.setPageNo(enumTypeDetailDto.getPageNo());
page.setTotalCount(totalCount);
page.setData(enumTypeDetailDtoList);
logger.info("EnumTypeDetailServiceImpl-->enumTypeDetailPage,page={}", JsonUtil.toJSONString(page));
return page;
}
六、编写SQL语句
<!-- 分页查询-->
<select id="enumTypeDetailPage" parameterType="com.jd.newnethp.diag.man.center.export.dto.EnumTypeDetailDto"
resultType="com.jd.newnethp.diag.man.center.export.dto.EnumTypeDetailDto">
select
<include refid="QUERY_COLUMN_LIST"/>
from newnethp_enum_detail
where
status = 1
<if test="typeCode!='' and typeCode!=null">
and type_Code=#{typeCode}
</if>
order by created desc
<include refid="QUERY_LIMIT_CONDITION"/>
</select>