今天遇到一个问题,实体类中的一个字段数据会变化,所以不存到数据库中,也不能用"order by xxx desc" 的方式进行排序。
研究了半天,用list.subList()方法实现分页,用Collections.sort()方法实现排序。问题解决,下面是代码:
数据库:oracle
连接方式:jpa
实体类:
@Entity
@Table(name="street_shops")
public class StreetShops extends BaseEntity{
...
private String sum; //得分总数字段
@Transient(生成数据库时,忽略该字段)
public String getSum() {
return sum;
}
public void setSum(String sum) {
this.sum = sum;
}
...
}
分页实体Page:
public class Page<T> {
protected transient final Log log = LogFactory.getLog(getClass());
// 分页显示
private int sum,// 总数
sumPages,// 总页数
curPage=1,// 当前页码
from, to,// 起止数
fromPage, toPage;// 起止页码,以1开始计算
private int per = 20;// 每页显示数
private int max = 5;
private List<Integer> page;// 页面输出
private boolean firstPage, lastPage, prePage, nextPage;// 是否显示:首页,尾页,前页,下页
private List<T> resultList = new ArrayList<T>();
public Page(){}
/**
*
* @param curPage 当前页码
* @param per 每页数量
* @param sum 总记录数
* @param list 结果集数据
*/
public Page(int curPage,int per,int sum,List<T> list){
this.setCurPage(curPage);
this.setPer(per);
this.page(sum);
this.setResultList(list);
}
/**
*
* @param curPage 当前页码
* @param per 每页数量
* @param sum 总记录数
* @param list 结果集数据
* @param max 翻页按钮最大数量
*/
public Page(int curPage,int per,int sum,List<T> list,int max){
this.setCurPage(curPage);
this.setPer(per);
this.max = max;
this.page(sum);
this.setResultList(list);
}
/**
* 分页显示
*/
// TODO 当 sum 为 0 时,看看 log,及页面的显示,稍微有点不通逻辑。
public void page(int sum) {
this.sum = sum;
if (sum % per != 0) {
sumPages = sum / per + 1;
} else {
sumPages = sum / per;
}
// 即刚第一次显示,初始化
if (curPage == 0) {
curPage = 1;
}
from = (curPage - 1) * per + 1;
to = curPage * per;
if (to > sum) {
to = sum;
}
if (sumPages <= max) {
fromPage = 1;
toPage = sumPages;
} else {
if (curPage <= max/2) {
fromPage = 1;
toPage = max;
} else {
fromPage = curPage - max/2;
toPa