page 分页工具
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文件方法:
-
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.stu.dao.StuMapper"> <resultMap id="BaseResultMap" type="com.stu.model.StuVo"> <result column="id" jdbcType="INTEGER" property="id" /> <result column="stu_id" jdbcType="VARCHAR" property="stuId" /> <result column="name" jdbcType="VARCHAR" property="name" /> <result column="sex" jdbcType="INTEGER" property="sex" /> <result column="creat_time" jdbcType="TIMESTAMP" property="creatTime" /> <result column="update_Time" jdbcType="VARCHAR" property="updateTime" /> <result column="score" jdbcType="DECIMAL" property="score" /> </resultMap> <insert id="insert" parameterType="com.stu.dto.StuDto"> INSERT INTO stu <trim prefix="(" suffix=")" suffixOverrides=","> <if test="id != null">id,</if> <if test="stuId != null">stu_id,</if> <if test="name != null">name,</if> <if test="sex != null">sex,</if> <if test="creatTime != null">creat_time,</if> <if test="updateTime != null">update_Time,</if> <if test="score != null">score,</if> </trim> VALUES <trim prefix="(" suffix=")" suffixOverrides=","> <if test="id != null">#{id},</if> <if test="stuId != null">#{stuId},</if> <if test="name != null">#{name},</if> <if test="sex != null">#{sex},</if> <if test="creatTime != null">#{creatTime},</if> <if test="updateTime != null">#{updateTime},</if> <if test="score != null">#{score},</if> </trim> </insert> <delete id="deleteById"> DELETE FROM stu WHERE id = #{id} </delete> <update id="update" parameterType="com.stu.dto.StuDto"> UPDATE stu SET <trim prefixOverrides=","> <if test="stuId != null">,stu_id=#{stuId}</if> <if test="name != null">,name=#{name}</if> <if test="sex != null">,sex=#{sex}</if> <if test="creatTime != null">,creat_time=#{creatTime}</if> <if test="updateTime != null">,update_Time=#{updateTime}</if> <if test="score != null">,score=#{score}</if> </trim> WHERE id = #{id} </update> <select id="queryById" resultMap="BaseResultMap"> SELECT id, stu_id, name, sex, creat_time, update_Time, score FROM stu WHERE id = #{id} </select> <select id="queryListCount" parameterType="java.util.Map" resultType="Integer"> SELECT COUNT(1) FROM stu <include refid="Base_Where_Clause" /> </select> <select id="queryList" parameterType="java.util.Map" resultMap="BaseResultMap"> SELECT id, stu_id, name, sex, creat_time, update_Time, score FROM stu <include refid="Base_Where_Clause" /> <if test="sortName != null and sortName !=''"> ORDER BY ${sortName} <if test="sortOrder != null and sortOrder !=''"> ${sortOrder} </if> </if> <if test="start != null and limit != null and limit !=0"> LIMIT #{start}, #{limit} </if> </select> <sql id="Base_Where_Clause"> <where> <trim prefixOverrides="and"> <if test="id != null and id != ''"> AND id = #{id}</if> <if test="stuId != null and stuId != ''"> AND stu_id = #{stuId}</if> <if test="name != null and name != ''"> AND name = #{name}</if> <if test="sex != null and sex != ''"> AND sex = #{sex}</if> <if test="creatTime != null and creatTime != ''"> AND creat_time = #{creatTime}</if> <if test="updateTime != null and updateTime != ''"> AND update_Time = #{updateTime}</if> <if test="score != null and score != ''"> AND score = #{score}</if> </trim> </where> </sql> </mapper>- 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; } }
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会自动计算:是否有上/下一页、总页数、当前页条数等),并继续查询集合返回分页对象出去(注意清空查询参数)
————————————————
版权声明:本文为CSDN博主「昵称同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37001743/article/details/122000333
- Dao接口
浙公网安备 33010602011771号