项目场景:资讯展示
资讯展示肯定得分页,因为挺多内容的:
在mysql中分页代码
select ... limit start,rows
表示从start+1行开始取,取出rows行,start从0开始计算
limit 每页显示记录数*(第几页-1),每页显示数;
当第一次访问时候,传入的参数不知道,所以要判断如果什么都不传,要给一个固定的值。然后把一共有几页,和当前页数也传过去。在前端页面,下一页,计算一个start传进去然后显示,上一页同理。判断边界,超过边界要挑到错误页面。
因此要有2个mybatis的sql,一个是分页,一个查数据库一共有多少数据。
<select id="queryTitle" parameterType="_int" resultType="news">
select title, time, read_nums, id
from treat.news
limit #{start},#{rows};
</select>
<select id="queryNumsNews" resultType="_int">
select count(*)
from treat.news;
</select>
@RequestMapping("/showTitleLimit")
public String showAllLimit(Integer start, Integer rows, Model model, Integer page) throws ParseException {
List<News> news;
int count = newsService.queryNumsNews();
int pageSize;
if (rows == null && start == null && page == null) {
rows = 5;
start = 0;
page = 1;
}
if (count % rows != 0) {
pageSize = (count / rows) + 1;//几页
} else {
pageSize = (count / rows);
}
if (page <= pageSize && page >= 0 && start >= 0) {
news = newsService.queryTitle(start, rows);
model.addAttribute("newsTitle", news);
model.addAttribute("pageSize", pageSize);
model.addAttribute("page", page);
model.addAttribute("nowSize", start);
return "showAllNews";
} else {
model.addAttribute("errMsg", "超出页数");
return "error";
}
}
page是页数,点击下一页,假设现在page是2表示第二页,start就要是5*(3-1)也就是5*(page)
点击上一页,假设现在page是2表示第二页,start就要是5*(1-1)也就是5*(page-2)
对于分页的想法目前只能想到这里,以后想到再补充