给用户列表增加分页与搜索功能
今天学习了给用户表增加分页功能,以及以username来搜索数据的搜索功能。
首先在bean层增加PageInfo这个分页的实体类,规定分页汇总每页显示的数据数,总页数,数据总条数,当前页:
package com.zhongruan.bean;
import java.util.List;
public class PageInfo<T> {
private List<T> list;
private int size;
private int totalPage;
private int totalCount;
private int currentPage;
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
}
然后在UserDao中增加getTotalCount接口,并修改List findAll()接口:
int getTotalCount(@Param("username") String username);
//List<User> findAll();
List<User> findAll(@Param("start") int start,@Param("username") String username);
接下来在UserMapper.xml中增加查询数据总数的语句,并且修改原来的查找数据方式,采用模糊查找方式,实现以username来查找数据的功能:
<select id="getTotalCount" resultType="int">
select count(*) from tb_user
<if test="username!=null and username!='' ">
where username like concat("%",#{username},"%")
</if>
</select>
<select id="findAll" resultType="user">
select * from tb_user
<if test="username!=null and username!='' ">
where username like concat("%",#{username},"%")
</if>
limit #{start},5
</select>
修改UserService中的接口:
// List<User> findAll();
PageInfo<User> findAll(int currentPage,String username);
修改UserServiceImpl中的findAll方法:
@Override
public PageInfo<User> findAll(int currentPage, String username) {
PageInfo<User> pageInfo=new PageInfo<>();
pageInfo.setSize(5);
//tc为当前查询数据的总行数
int tc=userDao.getTotalCount(username);
pageInfo.setTotalCount(tc);
//tp为总页数
int tp=(int)Math.ceil(tc/5.0);
pageInfo.setTotalPage(tp);
if(currentPage<1){
pageInfo.setCurrentPage(1);
}else if(currentPage>tp){
pageInfo.setCurrentPage(tp);
}else {
pageInfo.setCurrentPage(currentPage);
}
//0..5..10..15..
int start=(pageInfo.getCurrentPage()-1)*5;
List<User> userList=userDao.findAll(start,username);
pageInfo.setList(userList);
return pageInfo;
}
在UserController中修改findAll方法:
// @RequestMapping("/findAll.do")
// public ModelAndView findAll(){
// List<User> users =userService.findAll();
// ModelAndView mv=new ModelAndView();
// mv.addObject("users",users);
// mv.setViewName("user-list");
// return mv;
// }
@RequestMapping("/findAll.do")
public ModelAndView findAll(@RequestParam(defaultValue = "1")int currentPage, String username,
@RequestParam(defaultValue = "0")int type, HttpSession session){
if(type==1){
session.setAttribute("searchName",username);
}else {
username=(String) session.getAttribute("searchName");
}
PageInfo<User> pageInfo=userService.findAll(currentPage,username);
ModelAndView mv=new ModelAndView();
mv.addObject("pageInfo",pageInfo);
mv.setViewName("user-list");
return mv;
}
在user-list.jsp中的表格底部增加上下页跳转按钮:
<div class="box-tools pull-right">
<ul class="pagination">
<li><a href="/user/findAll.do" aria-lable="Previous">首页</a></li>
<li><a href="/user/findAll.do?currentPage=${pageInfo.currentPage-1}">上一页</a></li>
<c:forEach begin="1" end="${pageInfo.totalPage}" var="pageNum">
<li><a href="/user/findAll.do?currentPage=${pageNum}">${pageNum}</a></li>
</c:forEach>
<li><a href="/user/findAll.do?currentPage=${pageInfo.currentPage+1}">下一页</a></li>
<li><a href="/user/findAll.do?currentPage=${pageInfo.totalPage}" aria-lable="Next">尾页</a></li>
</ul>
</div>
接下来就可以运行查看修改的结果:
分页功能:
搜索功能:
数据库中用户表的数据:
今天的学习收获良多,希望接下来继续努力。