分页查询
步骤:以查询用户为例:
1.先查询出总记录数:
准备好接口方法:
int getAllSize();
2.准备好SQL语句:
<select id="getAllSize" resultType="int">
select count(*) from user;
</select>
service接口方法及实现类:
int getAllSize();
实现类:
@Override
public int getAllSize() {
return mapper.getAllSize();
}
然后把算好的起点和每页要显示的记录数放入map集合中,然后准备好接口方法:
public List<User> getAll(Map<String, Integer> map);
SQL语句:参数为键名
<select id="getAll" resultType="user" parameterType="map">
select * from user limit #{start},#{pageSize}
</select>
准备好Service接口和实现类:
public List<User> getAll(Map<String, Integer> map);
实现类:
@Override
public List<User> getAll(Map<String, Integer> map) {
return mapper.getAll(map);
}
在controller控制器的list方法中调用:
/**
*
* @param model
* @param nodePage 如果nodePage没有传入值的话,默认值为1
* @return
*/
@RequestMapping("/list")
public String list(Model model,@RequestParam(value = "nodePage",defaultValue = "1") int nodePage){
//获取数据总记录数:比如10条
int DataItemSize = userService.getAllSize();
int allPage = 0; //总页数
int pageSize = 5;//每页要显示的记录数
//判断数据总记录和每页要显示的记录数求余,余数是否为0
if (DataItemSize%pageSize==0){
allPage=DataItemSize/pageSize;// 10/5=2 总页数=2
}else{
allPage=(DataItemSize/pageSize)+1;//如果是13条:13/5=2.5 int类型取2整数,然后在加1就成了3页 总页数=3
}
int startIndex = 0;//默认值设置起点为0;
//select * from user limit 起点,条数
startIndex = (nodePage-1)*pageSize; //起点=当前页数-1*每页要显示的记录数
Map<String,Integer> map = new HashMap<String, Integer>(); //把起点和要显示的记录数存入map集合中
map.put("start",startIndex);
map.put("pageSize",pageSize);
model.addAttribute("allpage",allPage);//把总页数传到页面
model.addAttribute("nodePage",nodePage);//把当前页数传到页面
List<User> list = userService.getAll(map); //调用查询
model.addAttribute("users",list);
return "main";
}
转发到main.jsp页面:
<div id="all">
<table border="1px" width="700px">
<tr>
<td>序号</td>
<td>姓名</td>
<td>密码</td>
<td>性别</td>
<td>年龄</td>
<td>地址</td>
<td>生日</td>
<td>头像</td>
<td>操作</td>
</tr>
<c:forEach items="${requestScope.users}" varStatus="i" var="user">
<tr id="t${user.id}">
<td>${i.count}</td>
<td>${user.name}</td>
<td>${user.password}</td>
<td>${user.sex}</td>
<td>${user.age}</td>
<td>${user.address}</td>
<td><fmt:formatDate value="${user.birth}" pattern="yyyy年MM月dd日"/></td>
<td><img src="${pageContext.servletContext.contextPath}/icon/${user.icon}" width="30px"></td>
<%--REST风格从页面到controller传递数据--%>
<td><a href="${pageContext.servletContext.contextPath}/user/update/${user.id}">修改</a>
<a href="#" delId="${user.id}" class="deluser">删除</a></td>
</tr>
</c:forEach>
</table>
<c:if test="${requestScope.nodePage>1}"><%--当前页面不是第一页显示上一页--%>
<a href="${pageContext.servletContext.contextPath}/user/list?nodePage=${nodePage-1}">上一页</a>
</c:if>
<c:forEach begin="1" end="${requestScope.allpage}" var="pagesize">
<a href="${pageContext.servletContext.contextPath}/user/list?nodePage=${pagesize}">${pagesize}</a>
</c:forEach>
<c:if test="${requestScope.nodePage<requestScope.allpage}"><%--当前页面不是最后一页显示下一页--%>
<a href="${pageContext.servletContext.contextPath}/user/list?nodePage=${nodePage+1}">下一页</a>
</c:if>
</div>
本文详细介绍了如何在SSM(Spring、SpringMVC、MyBatis)框架下实现分页查询。首先通过编写接口和SQL语句获取总记录数,接着配置Service接口及其实现类,将分页参数放入Map中。最后在Controller中调用Service方法,并将结果转发到页面展示。
857

被折叠的 条评论
为什么被折叠?



