Java开发学习.Day4

ssm分页+搜索

包括基于ssm实现的表格分页及模糊查询功能(该项目基于Java开发学习.Day3)进行开发

创建实体类

在bean下创建pageInfo类。该类用于存储分页 需要展示的信息、每页展示的最大信息数、总页数、信息总数、当前页数
在这里插入图片描述

具体代码如下

package com.xxxxbt.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;
    }
}

dao层

为实现新的分页功能,需要对原有的findAll方法进行一定程度的修改

//    List<User> findAll();  
    List<User> findAll(@Param("start") int start,@Param("username")String username);

同时为了计算分页的总页数,还需获取数据库中满足查询信息的总数据量,为此添加如下代码

	int getTotalCount(@Param("username") String username);

service层

UserService接口需要根据当前页和搜索条件获取PageInfo对象,因此进行如下修改

//    List<User> findAll();
    PageInfo<User> findAll(int currentPage,String username);

UserServiceImpl中添加了实现分页的具体逻辑。先利用getTotalCound查询满足username条件的数据,获取总数据行数,再获取目标分页内的具体数据,存储于pageInfo中进行返回。

//    @Override
//    public List<User> findAll() {
//        return userDao.findAll();
//    }

    @Override
    public PageInfo<User> findAll(int currentPage,String username) {
        System.out.println("currentPage:"+currentPage);

        PageInfo<User> pageInfo=new PageInfo<>();
        pageInfo.setSize(5);
        // tc为数据总行数
        int tc=userDao.getTotalCount(username);
        System.out.println(tc);
        pageInfo.setTotalCount(tc);

        // tp为总页数
        int tp=(int)Math.ceil(tc/5.0);
        System.out.println(tp);
        pageInfo.setTotalCount(tp);

        if(currentPage<1){
            pageInfo.setCurrentPage(1);
        }else if(currentPage>tp){
            pageInfo.setCurrentPage(tp);
        }else {
            pageInfo.setCurrentPage(currentPage);
        }
        System.out.println("currentPage:"+currentPage);


        int start=(pageInfo.getCurrentPage()-1)*5;
        System.out.println("start:"+start);
        List<User> userList = userDao.findAll(start, username);
        pageInfo.setList(userList);
        return pageInfo;
    }

Controller层

处理 findAll 请求地址映射,其参数为:
currentPage 当前页(无则默认为1)
username 查询条件
type 点击搜索按钮为1,否则默认为1
session 状态
代码逻辑:当用户通过查询功能进行访问该地址时,将当前username存入session中,同时根据新的username进行查询;当用户通过非查询功能(如点击上下页跳转,或修改url中的参数)进行访问该地址时,即使当前查询框内的查询条件已经被更改,依旧按照session原有的username进行查询

//    @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");
        }
        System.out.println("currentPage:"+currentPage);
        PageInfo<User> pageInfo=userService.findAll(currentPage,username);
        ModelAndView mv=new ModelAndView();
        mv.addObject("pageInfo",pageInfo);
        mv.setViewName("user-list");
        return mv;
    }

在前端添加分页按钮

<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>

最终实现

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值