【page分页工具类】贼好用的分页工具类

  • PageUtils工具类如下:
package utils;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 类此够
 * @Description 分页工具类,贼好用的分页工具类
 */
public class PageUtils implements Serializable {
    public static void main(String[] args) {
//        PageUtils p = new PageUtils();
//        p.setPageIndex(1); // 当前页
//        // p.setStart(0); // 起始条数
//        p.setLimit(10); // 每页条数
//        p.setParam("name", "xiaohei");
//        /*
//         * 只需要根据param查询总条数设置一下, 其他字段:例如共多少页,是否有下一页,是否有上一页,当前页多少条,字段自动会根据totalCount算出;
//         */
//        p.setTotalCount(20);
//
//        p.clearParam();
//		System.out.println(JSON.toJSONString(p));
    }

    private static final long   serialVersionUID = 1L;

    private int                 pageIndex;                                       // 当前页
    private int                 start;                                           // 起始条数
    private int                 limit;                                           // 每页显示条数
    private int                 totalCount;                                      // 总条数

    // 以下参数只能算, 不能有setXX方法---start
    // 根据param参数查询出totalCount, 计算设置
    private int                 totalPage;                                       // 总页数
    private int                 totalCountPageIndex;                             // 当前页有多少条
    private boolean             hasNextPage;                                     // 是否有下一夜
    private boolean             hasLastPage;                                     // 是否有上一夜
    // 以下参数只能算, 不能有setXX方法---end

    private String              sortName;                                        // 排序字段
    private String              sortOrder;                                       // 排序方式:(ASC/DESC)
    private Map<String, Object> queryParam       = new HashMap<String, Object>();
    private List<?>             data;

    public Map<String, Object> getParam() {
        // 校验部分参数合理性
        if ((this.start < 0) || (this.pageIndex <= 0) || (this.limit <= 0)) {// 参数错误, (为最首页准备)
            throw new RuntimeException("请检查入参 start / pageIndex / limit !");
        }
        
        // 如果既有start且start>0, 又有pageIndex, 则优先取start, 且不再做分页处理(已传start, 则本意就是指定查多少条)
        if (this.start == 0) {
            this.start = (this.pageIndex - 1) * this.limit;
        } else {
            queryParam.put("pageIndex", "-999"); // 已传start>0
        }
        
        queryParam.put("start", this.start);
        queryParam.put("limit", this.limit);
        queryParam.put("sortName", this.sortName);
        queryParam.put("sortOrder", this.sortOrder);
        return queryParam;
    }

    public int getTotalCount() {
        return totalCount;
    }

    /**
     * @author 类此够
     * @param
     * @return 
     * @description 
     * 设置总条数, 同时计算是否有上下页
     */
    public void setTotalCount(int totalCount) {
        if (totalCount == 0) {
            return;
        }

        if ((totalCount > 0) && (this.start >= totalCount)) {
            System.out.println("start: " + start + ", pageIndex: " + pageIndex + ", limit: " + limit + ", totalCount: " + totalCount);
            throw new RuntimeException("请检查入参!");
        }
        this.totalCount = totalCount;
        // 参数 有start且start>0, 则优先取start, 且不再做分页处理
        if ("-999".equals(queryParam.get("pageIndex"))) {
            queryParam.remove("pageIndex");
            return;
        }
        if (totalCount <= this.limit) { // 首页即总页
            this.pageIndex = 1;
            this.totalCountPageIndex = totalCount;
            return;
        }
        // 总页数
        this.totalPage = (totalCount % this.limit == 0) ? (totalCount / this.limit) : (totalCount / this.limit + 1);
        /* 根据起始条数,算出当前页; */
        this.pageIndex = (this.start == 0) ? pageIndex : (start / limit + 1);

        if (pageIndex == 1) {// 首页
            this.totalCountPageIndex = limit;
            this.hasNextPage = true;
        } else if ((pageIndex > 1) && (pageIndex == totalPage)) { // 末页
            this.totalCountPageIndex = (totalCount - (pageIndex - 1) * limit);
            this.hasLastPage = true;
        } else {// 中间页
            this.totalCountPageIndex = limit;
            this.hasLastPage = true;
            this.hasNextPage = true;
        }
    }

    public void setParam(Map<String, Object> param) {
        queryParam.putAll(param);
    }

    public void setParam(String key, Object value) {
        queryParam.put(key, value);
    }

    public void setParam(String key, String value) {
        queryParam.put(key, value);
    }

    public void removeParam(String key) {
        queryParam.remove(key);
    }

    public void clearParam() {
        queryParam.clear();
        sortName = null;
        sortOrder = null;
    }

    public PageUtils() {
        // 不设置页数和条数的话;默认显示第一页,每页10条数据,
        this.start = 0;
        this.pageIndex = 1;
        this.limit = 10;
    }

    public PageUtils(int pageIndex, int limit) {
        this.pageIndex = pageIndex;
        this.limit = limit;
    }

    public String getSortName() {
        return sortName;
    }

    public void setSortName(String sortName) {
        this.sortName = sortName;
    }

    public String getSortOrder() {
        return sortOrder;
    }

    public void setSortOrderASC() {
        this.sortOrder = "ASC";
    }

    public void setSortOrderDESC() {
        this.sortOrder = "DESC";
    }

    public List<?> getData() {
        return data;
    }

    public void setData(List<?> data) {
        this.data = data;
    }

    public int getPageIndex() {
        return pageIndex;
    }

    public void setPageIndex(int pageIndex) {
        this.pageIndex = pageIndex;
    }

    public int getLimit() {
        return limit;
    }

    public void setLimit(int limit) {
        this.limit = limit;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public int getTotalCountPageIndex() {
        return totalCountPageIndex;
    }

    public void setStart(int start) {
        this.start = start;
    }

    public boolean getHasNextPage() {
        return hasNextPage;
    }

    public boolean getHasLastPage() {
        return hasLastPage;
    }
}

  • dao层的Mapper文件方法:



	
		
		
		
		
		
		
		
	

	
		INSERT INTO stu
		
			id,
			stu_id,
			name,
			sex,
			creat_time,
			update_Time,
			score,
		
		VALUES
		
			#{id},
			#{stuId},
			#{name},
			#{sex},
			#{creatTime},
			#{updateTime},
			#{score},
		
	

	
		DELETE FROM stu WHERE
		id = #{id}
	

	
		UPDATE stu SET
		
			,stu_id=#{stuId}
			,name=#{name}
			,sex=#{sex}
			,creat_time=#{creatTime}
			,update_Time=#{updateTime}
			,score=#{score}
		
		WHERE id = #{id}
	

	

	

	

	
		
			
				 AND id = #{id}
				 AND stu_id = #{stuId}
				 AND name = #{name}
				 AND sex = #{sex}
				 AND creat_time = #{creatTime}
				 AND update_Time = #{updateTime}
				 AND score = #{score}
			
		
	

  • Dao接口
package com.stu.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.stu.dto.StuDto;
import com.stu.model.StuVo;

public interface StuMapper {
	// 插入
	int insert(StuDto dto);

	// 删除
	int deleteById(@Param("id") String id);

	// 更新
	int update(StuDto dto);

	// 查询单条
	StuVo queryById(@Param("id") String id);

	// 查询条数
	int queryListCount(Map<String, Object> param);

	// 查询集合
	List<StuVo> queryList(Map<String, Object> param);
}
  • 实体类(入参/反参)对象
package com.stu.model;

import java.io.Serializable;
import java.sql.Timestamp;

public class StuVo implements Serializable {
	private static final long	serialVersionUID	= 1L;

	private String				id;							// 
	private String				stuId;						// 学生号
	private String				name;						// 姓名
	private String				sex;						// 性别(1男,2女)
	private Timestamp			creatTime;					// 创建时间
	private String				updateTime;					// 修改时间
	private Long				score;						// 

	public void setId(String id) {
		this.id = id;
	}

	public String getId() {
		return id;
	}

	public void setStuId(String stuId) {
		this.stuId = stuId;
	}

	public String getStuId() {
		return stuId;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getSex() {
		return sex;
	}

	public void setCreatTime(Timestamp creatTime) {
		this.creatTime = creatTime;
	}

	public Timestamp getCreatTime() {
		return creatTime;
	}

	public void setUpdateTime(String updateTime) {
		this.updateTime = updateTime;
	}

	public String getUpdateTime() {
		return updateTime;
	}

	public void setScore(Long score) {
		this.score = score;
	}

	public Long getScore() {
		return score;
	}

}
package com.stu.dto;

import java.io.Serializable;

public class StuDto implements Serializable {
	private static final long	serialVersionUID	= 1L;

	private String				id;							// 
	private String				stuId;						// 学生号
	private String				name;						// 姓名
	private String				sex;						// 性别(1男,2女)
	private String				creatTime;					// 创建时间
	private String				updateTime;					// 修改时间
	private String				score;						// 

	public void setId(String id) {
		this.id = id;
	}

	public String getId() {
		return id;
	}

	public void setStuId(String stuId) {
		this.stuId = stuId;
	}

	public String getStuId() {
		return stuId;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getSex() {
		return sex;
	}

	public void setCreatTime(String creatTime) {
		this.creatTime = creatTime;
	}

	public String getCreatTime() {
		return creatTime;
	}

	public void setUpdateTime(String updateTime) {
		this.updateTime = updateTime;
	}

	public String getUpdateTime() {
		return updateTime;
	}

	public void setScore(String score) {
		this.score = score;
	}

	public String getScore() {
		return score;
	}

}
  • Service层
package zweb.service;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.stu.dao.StuMapper;
import com.stu.model.StuVo;

import utils.PageUtils;

@Service
public class StuService {

	@Autowired
	private StuMapper stuMapper;

	public PageUtils queryList(PageUtils p) {
		Map<String, Object> param = p.getParam();
		int total = stuMapper.queryListCount(param);
		if (total != 0) {
			p.setTotalCount(total);
			List<StuVo> dataList = stuMapper.queryList(param);
			p.setData(dataList);
		}
		p.clearParam();
		return p;
	}
}
  • Controller层
	/**
	 * @author 类此够
	 * 获取列表
	 */
	@ResponseBody
	@RequestMapping("/getStuList")
	public JSONObject getStuList(HttpServletRequest request, HttpServletResponse response) {
		JSONObject ret = new JSONObject();
		ret.put("success", true);
		ret.put("errorCode", 200);
		ret.put("errorMsg", "");
		PageUtils page = new PageUtils();

		try {
			if (StringUtils.isNotEmpty(request.getParameter("pageIndex"))) {
				page.setPageIndex(Integer.parseInt(request.getParameter("pageIndex")));
			}
			if (StringUtils.isNotEmpty(request.getParameter("limit"))) {
				page.setLimit(Integer.parseInt(request.getParameter("limit")));
			}
			page = stuService.queryList(page);
			ret.put("data", page);
		} catch (Exception e) {
			ret.put("success", false);
			ret.put("errorCode", 500);
			ret.put("errorMsg", "服务器异常,请联系管理员!");
			e.printStackTrace();
		} finally {
			return ret;
		}

	}

主要关注点:
1。controller层的request入参
2。service层调用dao时候先查条数,
|----条数为0直接返回!!
|----条数不为0,设置页数总条数(此时PageUtils会自动计算:是否有上/下一页、总页数、当前页条数等),并继续查询集合返回分页对象出去(注意清空查询参数)

你可能感兴趣的:(java一些工具类,java,开发语言,后端)