功能开发
分页功能是通过后端逻辑实现的,而非前端的组件
(1)实体类 PageInfo
在bean目录下新建一个PageInfo实体类,用来存放每一页显示的信息、和分页的一些参数和属性
package com.tengshan.bean;
import java.util.List;
package com.tengshan.bean;
import java.util.List;
public class PageInfo { //定义为泛型
private List<T> list; //每一页用一个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;
}
修改dao目录下的接口List findAll(@Param(“start”)int start,@Param(“username”)String username);
替换掉之前的findAll方法,此处的@Param注解是用在dao文件中,用于与mapper文件中的sql语句字段对应,将此处的参数传到sql语句里。同时我们修改UserMapper里面的sql语句为
`select * from user_ssm
where username like concat("%",#{username},"%")
limit #{start},8`
再在service业务处理层替换同样操作的接口方法,再在impl调用dao目录下的方法实现功能。
将findAll修改和搜索功能共用
在impl中进行一个逻辑判断,当点击下一页到达最后一页继续currentPage+1时,设置currentPage为totalPage,同理将左边界设置为1,
这里的state用来表示当前页面的第一条数据在数据库中的位置,在state往后的8条数据将会被显示在页面中。再通过userDao将state和username传到sql语句中进行查询,并将查询到的结果存储在userList中
@Override
public PageInfo findAll(int currentPage, String username) {
PageInfo pageInfo = new PageInfo<>();
pageInfo.setSize(8);//每页长度 和 userMapper中一致 每一页显示5条
int totalCount = userDao.getTotalCount(username); //查询总长度
pageInfo.setTotalCount(totalCount);
int totalPage = (int)(totalCount/pageInfo.getSize()) + 1;
pageInfo.setTotalPage(totalPage);
if(currentPage<1){
pageInfo.setCurrentPage(1);
}else if(currentPage>totalPage){
pageInfo.setCurrentPage(totalPage);
}else{
pageInfo.setCurrentPage(currentPage);
}
int start = (pageInfo.getCurrentPage()-1)*pageInfo.getSize(); //开始查询的数
List<User> userList = userDao.findAll(start,username);
pageInfo.setList(userList);
return pageInfo;
}
之后修改控制器代码如下,同样也是替换掉之前的findAll方法
@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);//将username保存到session中
}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;}
最后修改jsp文件,需要修改pages目录下的user-list.jsp
先将原先遍历user用于展示的user改为遍历存放在pageInfo中的list