中软实习培训记录四(0723)

中软实习培训记录四(0723)

在上一篇文章中,我们完成了一个简单的ssm项目——一个用户管理系统,包括了用户的登录以及信息的增删改查,今天我们会在昨日基础上,进一步扩展功能。

分页功能+搜索功能

1、首先要创建一个分页的实体类。每一页,都相当于一个集合,可以放很多条数据,另外每一页还要规定展示多少条数据,也就是分页的尺寸。对于一个分页的实体类,我们还需要知道总的页数,以及总的数据条数,因此,实体类设计如下:

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

    @Override
    public String toString() {
        return "PageInfo{" +
                "list=" + list +
                ", size=" + size +
                ", totalPage=" + totalPage +
                ", totalCount=" + totalCount +
                ", currentPage=" + currentPage +
                '}';
    }
}

2、在UserDao中定义“得到数据库表中数据条数”的方法,考虑到之后所要实现的搜索功能,我们在该方法中加入限制:

//得到数据库表中数据条数
    int getTotalCount(@Param("username") String username);

3、根据Dao的方法要求,更新UserMapper.xml中的sql命令

<select id="getTotalCount" resultType="int">
        select count(*) from test2
        <if test="username!=null and username!=''">
            where username like concat("%",#{username},"%")
        </if>
    </select>

此部分用到的是模糊查询

模糊查询的意义在于使用搜索功能时,能通过输入的内容查询到所有符合条件的内容:
在这里插入图片描述

此时,我们可以考虑到,是否能将这个模糊查询与原本的add(findAll)相结合,在搜索框中没有输入查询条件时,将所有用户信息展现在界面上

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

limit #{start},5 表示从开始搜索的地方,搜5条

对应的Dao中原有的findAll方法也改成:

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

4、修改UserService定义的方法,将原来的findAll方法改为:

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

并在UserServiceImpl中进行实现

    @Override
    public PageInfo<User> findAll(int currentPage, String username) {
        PageInfo<User> pageInfo=new PageInfo<>();
        pageInfo.setSize(5);
        int tc=userDao.getTotalCount(username);//tc是totalCount的简写,查询数据的总数
        pageInfo.setCurrentPage(tc);
        int tp=(int)Math.ceil(tc/5.0);//tp为totalPages,查询数据总页数
        pageInfo.setTotalPage(tp);
        if(currentPage<1){
            pageInfo.setCurrentPage(1);
        }else if(currentPage>tp){
            pageInfo.setCurrentPage(tp);
        }else{
            pageInfo.setCurrentPage(currentPage);
        }
        //第一页第一行数据为0,第二页第一行数据为5……
        int start=(pageInfo.getCurrentPage()-1)*5;
        List<User> userList=userDao.findAll(start,username);
        pageInfo.setList(userList);
        return pageInfo;
    }

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

5、进入到Controller中,对原有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){
        PageInfo<User> pageInfo=userService.findAll(currentPage,username);
        ModelAndView mv=new ModelAndView();
        mv.addObject("pageInfo",pageInfo);
        mv.setViewName("user-list");
        return mv;
    }

但是光这样改,如果运行是会出错的,因为在之前的findAll中,我们设定了mv中加入的是user,对应的前端设计时也是users:
在这里插入图片描述
但是现在我们改成了pageInfo,因此修改:

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

并且,我们要实现分页,就需要在界面上加上对应的翻页的按钮,前端部分按钮设计如下:

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

在这里插入图片描述

6、翻页效果:
在这里插入图片描述
在这里插入图片描述

7、搜索功能演示,搜索框中输入l,得到所有以l开头的用户信息。
在这里插入图片描述

改进

上述我们已经基本实现了搜索和翻页,但是如果查询出来的用户大于5个点击下一页,发现出现的是所有人的下一页,因此我们需要进行改进

修改controller:

 @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;
    }

页码显示

原本设计的界面上,是没有显示页码的,仅有四个按钮“首页”“上一页”“下一页”“尾页”
现在要想显示页数,可以在前端上修改代码:

</div>
					<!-- /.box-footer-->
					<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、付费专栏及课程。

余额充值