【学习日记】(SSM-part 2)在用SSM实现CRUD的基础上添加搜索和分页功能

在用SSM实现CRUD的基础上添加搜索和分页功能

添加的功能是在之前的开发基础上添加的分页和查询功能,使用SSM实现基础的CRUD功能,本次的分页功能主要由后端逻辑代码实现。

1 功能描述和效果展示

之前开发的项目仅仅实现了对数据库的crud功能,查询显示的数据很多的话会一直拉长滑动条
在这里插入图片描述在增加分页功能之后界面更加友好,一齐开发了搜索功能

在这里插入图片描述

2 本次开发用到的jsp界面

目前的jsp界面是用中软的老师分享的现成的jsp资源,已征得老师允许放入个人博客展示。

文件目录如下
在这里插入图片描述
这部分代码可以通过点击我 获取。

3 功能开发

分页功能是通过后端逻辑实现的,而非前端的组件
(1)实体类 PageInfo
在bean目录下新建一个PageInfo实体类,用来存放每一页显示的信息、和分页的一些参数和属性

package com.tengshan.bean;

import java.util.List;

public class PageInfo<T> {  //定义为泛型

    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<User> findAll(@Param("start")int start,@Param("username")String username);

这行代码替换掉之前的findAll方法,此处的@Param注解是用在dao文件中,用于与mapper文件中的sql语句字段对应,将此处的参数传到sql语句里。同时我们修改UserMapper里面的sql语句为

<select id="findAll" resultType="user">
    select * from user_ssm
    <if test="username!=null and username!=''">
        where username like concat("%",#{username},"%")
    </if>
    limit #{start},8
</select>

替换掉以前findAll的sql语句,之后再在service业务处理层替换同样操作的接口方法,再在impl调用dao目录下的方法实现功能。

PageInfo<User> findAll(int currentPage,String username);//将findAll修改和搜索功能共用

在impl中进行一个逻辑判断,当点击下一页到达最后一页继续currentPage+1时,设置currentPage为totalPage,同理将左边界设置为1,
这里的state用来表示当前页面的第一条数据在数据库中的位置,在state往后的8条数据将会被显示在页面中。再通过userDao将state和username传到sql语句中进行查询,并将查询到的结果存储在userList中

@Override
public PageInfo<User> findAll(int currentPage, String username) {
     PageInfo<User> 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;
}

这里传入了四个参数,默认值为1的当前界面,username,默认值为0的标识符以及一个存储信息的session,运行过程如下图
在这里插入图片描述
最后修改jsp文件,需要修改pages目录下的user-list.jsp
先将原先遍历user用于展示的user改为遍历存放在pageInfo中的list

 <c:forEach items="${pageInfo.list}" var="user">

在这里插入图片描述再在当前的section下添加按钮

<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}" aria-lable="Previous">上一页</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}" aria-lable="Previous">下一页</a></li>
		<li><a href="/user/findAll.do?currentPage=${pageInfo.totalPage}" aria-lable="Previous">尾页</a></li>
	</ul>
</div>

添加位置
在这里插入图片描述最后运行登陆或直接通过http://localhost:8080/user/findAll.do查看界面
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值