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;
}
}
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}
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;
}
}
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;
}
}
/**
* @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会自动计算:是否有上/下一页、总页数、当前页条数等),并继续查询集合返回分页对象出去(注意清空查询参数)