概述
APP/小程序的列表分页,前端传你page,你传给前端isEnd和list。
管理后台的列表分页,前端传你page,你传给前端list、total和pageSize。
分页计算公式:第n页的第一条数据是start = (n - 1) * size,最后一条是n * size-1。
Post类
package com.post.module.entity;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigInteger;
/**
* post
* @author
*/
@Data
@Accessors(chain = true)
public class Post{
private BigInteger id;
private BigInteger areaId;
/**
* 标题
*/
private String title;
/**
* 头像
*/
private String headImage;
/**
* 用户名
*/
private String userName;
/**
* 关注数
*/
private Integer attentionCount;
/**
* 内容图片
*/
private String contentImages;
private Integer createTime;
private Integer updateTime;
private Integer isDeleted;
/**
* 内容
*/
private String content;
}
PostMapper
/**
* 分页
*
* @param title
* @return
*/
List<Post> findPostByPage(@Param("title") String title, @Param("offset") Integer offset,
@Param("pageSize") Integer pageSize,@Param("ids") String ids);
Integer total(@Param("title") String title);
PostService
public List<Post> findPostByPage(String title, Integer page, Integer pageSize , String areaName) {
int offset = (page - 1) * pageSize;
List<String> areaIds = areaMapper.findAreaIds(areaName);
StringBuilder sb = new StringBuilder();
for (String id:areaIds) {
sb.append(id + ",");
}
sb.deleteCharAt(sb.lastIndexOf(","));
List<Post> postList = postMapper.findPostByPage(title, offset, pageSize,sb.toString());
return postList;
}
xml
<select id="findPostList" parameterType="java.lang.String" resultType="com.post.module.entity.Post">
select * from post
<where>
<if test="title != null and title != ''">
title like concat('%',#{title},'%')
</if>
and is_deleted = 0
</where>
</select>
<select id="findPostByPage" resultType="com.post.module.entity.Post">
select * from post
<where>
<if test="title != null and title != ''">
title like concat('%',#{title},'%')
OR area_id in (${ids}) and is_deleted = 0
</if>
</where>
limit #{offset},#{pageSize}
</select>
<select id="total" parameterType="java.lang.String" resultType="java.lang.Integer">
select COUNT(*) from post
<where>
<if test="title != null and title != ''">
title like concat('%',#{title},'%') and is_deleted = 0
</if>
OR area_id in (${ids})
</where>
</select>
controller
/**
* 帖子列表页
*
* @param
* @return
*/
@RequestMapping("/post/list")
public PostPageVo findPostByPage(@RequestParam(value = "title", required = false) String title,
@RequestParam(value = "areaName", required = false) String areaName,
@RequestParam(value = "page") Integer page) {
final int pageSize = 2;
List<Post> postList = postService.findPostByPage(title, page, pageSize,areaName);
Integer total = postService.total(title);
List<PostListVo> postVoList = new ArrayList<>();
PostPageVo postPageVo = new PostPageVo();
for (Post post : postList) {
PostListVo postListVo = new PostListVo();
BigInteger areaId = post.getAreaId();
Area area = areaService.getById(areaId);
postListVo.setId(post.getId())
.setTitle(post.getTitle())
.setHeadImage(post.getHeadImage())
.setAttentionCount(post.getAttentionCount())
.setContent(post.getContent())
.setContentImage(post.getContentImages().split("\\$")[0])
.setCreateTime(Util.transForDate(post.getCreateTime()))
.setUpdateTime(Util.transForDate(post.getUpdateTime()))
.setIsDeleted(post.getIsDeleted())
.setName(area.getName());
postVoList.add(postListVo);
}
postPageVo.setPageSize(pageSize)
.setTotal(total)
.setPostList(postVoList);
return postPageVo;
}
/**
* 根据title做查询
*
* @param wp
* @return
*/
@RequestMapping("/post/list")
public PostPageVo findPostByPage(@RequestParam(value = "wp", required = false) String wp,
@RequestParam(value = "areaName", required = false) String areaName) {
final int pageSize = 2;
PostPageVo postPageVo = new PostPageVo();
List<Post> postList = postService.findPostByPage(title, page, pageSize,areaName);
boolean isEnd = postList.size()<pageSize ? true : false;
List<PostListVo> postVoList = new ArrayList<>();
for (Post post : postList) {
PostListVo postListVo = new PostListVo();
BigInteger areaId = post.getAreaId();
Area area = areaService.getById(areaId);
if (area == null){
continue;
}
postListVo.setTitle(post.getTitle())
.setHeadImage(post.getHeadImage())
.setAttentionCount(post.getAttentionCount())
.setContent(post.getContent())
.setName(area.getName())
.setContentImage(post.getContentImages().split("\\$")[0]);
postVoList.add(postListVo);
}
postPageVo.setIsEnd(isEnd)
.setPostList(postVoList);
return postPageVo;
}