ssm从数据库取数据在jsp用分页显示

本文参考了下面的文章,很棒,对我很有用。感谢这位作者!

https://blog.csdn.net/qq_29376717/article/details/78155240

以下是根据我实际情况修改的代码,特地记录以防以后也要用到分页。

前端jsp:(分页条码用的是bootstrap4)

 <div class="page">
        <ul class="pagination">
            <li class="page-item"><a class="page-link" href="article?pageIndex=1">首页</a></li>
            <li class="page-item"><a class="page-link" href="article?pageIndex=${pageUtil.pageIndex>1?pageUtil.pageIndex-1:1}">上一页</a></li>
            <c:forEach begin="1" end="${pageUtil.pageCount}" var="i">
                <c:choose>
                    <c:when test="${i==pageUtil.pageIndex}">
                        <li class="page-item "><a class="page-link" href="article?pageIndex=${i}" style="background: #c90a16;color: white;">${i }</a></li>
                    </c:when>
                    <c:otherwise>
                        <li class="page-item "><a class="page-link" href="article?pageIndex=${i}">${i }</a></li>
                    </c:otherwise>
                </c:choose>
            </c:forEach>
            <li class="page-item"><a class="page-link" href="article?pageIndex=${pageUtil.pageIndex<pageUtil.pageCount?pageUtil.pageIndex+1:pageUtil.pageCount}">下一页</a></li>
            <li class="page-item"><a class="page-link" href="article?pageIndex=${pageUtil.pageCount}">尾页</a></li>
            <li class="page-item disabled"><a class="page-link" href="#">共<span >${pageUtil.pageCount }</span>页</a> </li>
        </ul>
        </div>

controller层:

@RequestMapping(value = "article")
    public ModelAndView pageArticle(ModelAndView model, HttpSession session, HttpServletRequest request) {
        int pageIndex = 1;
        if (request.getParameter("pageIndex") != null)
            pageIndex = Integer.parseInt(request.getParameter("pageIndex"));
        Integer userid = (Integer) session.getAttribute("userid");
        //根据用户id取出数据,10表示pagesize=10,每页10条数据,
        List<Article> listArticle = articleService.getArticlePage(userid, pageIndex, 10);
        System.out.println(listArticle.get(0).getContent());
        //将listArticle封装到pageutil类中
        PageUtil<Article> pageUtil = new PageUtil<Article>();
        pageUtil.setList(listArticle);
        //pagenumber表示共多少条数据
        Integer pageNumber = articleService.getArticlePageCount(userid);
        //pagecount表示多少页
        int pageCount = (int) Math.ceil(pageNumber / 10);
        if (pageCount < 1)
            pageCount = 1;
        pageUtil.setPageCount(pageCount);
        pageUtil.setPageNumber(pageNumber);
        pageUtil.setPageIndex(pageIndex);
        request.setAttribute("pageUtil", pageUtil);
        Collections.reverse(listArticle);
        Collections.copy(listArticle, listArticle);
        model.addObject("listArticle", listArticle);
        model.setViewName("article/article");
        System.out.println("pageNumber:" + pageNumber);
        return model;
    }

service层:

 public List<Article> getArticlePage(Integer userid, int pageIndex, int pageSize) {
        return articleMapper.getArticlePage(userid,(pageIndex-1) * pageSize, pageSize);
    }

    public int getArticlePageCount(Integer userid) {
        return articleMapper.getArticlePageCount(userid);
    }

mapper.java:

  List<Article> getArticlePage(@Param("userid") Integer userid, @Param("pageIndex") int pageIndex,@Param("pageSize") int pageSize);

    int getArticlePageCount(Integer userid);

mapper.xml

    <!-- 分页查询该用户的所有帖子信息 getArticlePage-->
    <select id="getArticlePage" parameterType="com.mandy.model.Article" resultMap="BaseResultMap">
    select fid, title, content, label, time, userid, username, readNum,likes
    from article
    where userid = #{userid,jdbcType=INTEGER}
   limit #{pageIndex,jdbcType=INTEGER},#{pageSize,jdbcType=INTEGER}
  </select>
<!--  SELECT COUNT(*) FROM 表名称。getArticlePageCount-->
  <select id="getArticlePageCount" parameterType="java.lang.Integer" resultType="Integer">
    select count(*)
    from article
    where userid = #{userid,jdbcType=INTEGER}
  </select>

运行结果:(只展示分页部分,内容部分省...)

A:实现分页功能需要考虑以下几个步骤: 1. 在jsp页面添加分页控件,比如使用bootstrap的分页控件。 2. 在Controller添加处理分页请求的方法,这个方法需要接收当前页码、每页显示的记录数等参数。可以使用Spring提供的Pageable类来简化代码。 3. 在Service层查询数据库符合条件的数据,利用Mybatis提供的分页插件查询指定页码的数据。 4. 将查询结果返回给Controller层,再将结果封装成一个Page对象返回给jsp页面。 5. 在jsp页面使用JSTL标签迭代Page对象的记录集合,渲染表格或其他控件显示数据。同时,使用bootstrap分页控件提供的方法实现翻页功能。 具体实现方式可以参考以下示例代码: 1. 在jsp页面添加分页控件: ```html <div class="pagination"> <ul> <li><a href="#">Prev</a></li> <li class="active"><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">Next</a></li> </ul> </div> ``` 2. 在Controller添加处理请求的方法: ```java @RequestMapping("/list") public String list(@RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "10") Integer pageSize, Model model) { // 查询指定页码的数据 Page<User> page = userService.findPage(pageNum, pageSize); // 将查询结果添加到model传递给jsp页面 model.addAttribute("page", page); return "userList"; } ``` 3. 在Service层查询数据,并使用Mybatis的分页插件实现分页查询: ```java @Override public Page<User> findPage(Integer pageNum, Integer pageSize) { PageHelper.startPage(pageNum, pageSize); List<User> userList = userDao.findAll(); PageInfo<User> pageInfo = new PageInfo<>(userList); return new PageImpl<>(userList, PageRequest.of(pageNum - 1, pageSize), pageInfo.getTotal()); } ``` 4. 在jsp页面使用JSTL标签迭代Page对象的记录集合,并渲染表格显示数据: ```html <table class="table table-bordered"> <thead> <tr> <th>编号</th> <th>姓名</th> <th>年龄</th> <th>性别</th> </tr> </thead> <tbody> <c:forEach items="${page.content}" var="user"> <tr> <td>${user.id}</td> <td>${user.name}</td> <td>${user.age}</td> <td>${user.gender}</td> </tr> </c:forEach> </tbody> </table> ``` 5. 使用bootstrap分页控件提供的方法实现翻页功能: ```javascript $('.pagination').bootstrapPaginator({ currentPage: ${page.number + 1}, // 当前页码,注意要+1 totalPages: ${page.totalPages}, // 总页数 size: 'small', // 控件大小 onPageClicked: function (event, originalEvent, type, page) { // 点击页码时跳转到指定页码的地址 window.location.href = '/user/list?pageNum=' + page; } }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值