java代码中实现查询后controller层分页和排序

本文介绍了在Java项目中,由于实体类字段无法直接排序,作者通过list.subList()进行分页,Collections.sort()实现排序。在Oracle数据库和JPA连接下,虽然解决了问题,但这种方式会导致性能下降。建议在可能的情况下,使用数据库的"order by"来提升效率。
摘要由CSDN通过智能技术生成

今天遇到一个问题,实体类中的一个字段数据会变化,所以不存到数据库中,也不能用"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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值