springMVC+mybatis分页

搭建环境

参考:ssm的简单整合

分页代码

实体类

    public class Article {
        private String id;
        private String name;
        private String content;
        //省略get、set
    }

Mapper接口

    public interface ArticleMapper {


        List<Article> findAllArticlePage(@Param("startIndex") Integer startIndex,
                                         @Param("pageSize") Integer pageSize);

        Integer findTotalNum();
    }

Mapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
      PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.wqh.mapper.ArticleMapper">

        <select id="findAllArticlePage" resultType="article">
            SELECT * from article limit #{startIndex},#{pageSize};
        </select>
        <select id="findTotalNum" resultType="Integer">
            SELECT count(*) from article;
        </select>
    </mapper>

service

    @Service
    public class ArticleServiceImpl implements ArticleService {
    @Autowired
    private ArticleMapper articleMapper;

    public Page findArticlePage(String num, String url) {
        int pageNum = 1;//默认为第一页
        if(num != null && !num.equals("")){
            pageNum = Integer.parseInt(num);
        }
        int totalRecords = articleMapper.findTotalNum();//得到总的记录数
        Page page = new Page(pageNum, totalRecords);
    //  设置每页的记录
    //  page.setPageSize(5);
        List<Article> articlePage = articleMapper.findAllArticlePage(page.getStartIndex(), page.getPageSize());
        page.setUri(url);
        page.setRecords(articlePage);
        return page;
        }
    }

action

@Controller
    @RequestMapping("/articleAction")
    public class ArticleAction {
    @Autowired
    private ArticleService articleService;

    @RequestMapping("/findPage")
    public String findPage(Model model,String pageNum){
            Page page = articleService.findArticlePage(pageNum, "/articleAction/findPage.action");
            model.addAttribute("page",page);
            return "search";
        }
    }

page

分页的关键类

public class Page {
    private List records;// 存放分页记录

    private int currentPageNum;// 当前页码
    private int totalPage;// 总页数
    private int pageSize = 5;// 每页显示的记录条数,设置默认值

    private int totalRecords;// 总记录条数
    private int startIndex;// 每页记录开始的索引

    private int prePageNum;// 上一页
    private int nextPageNum;// 下一页

    private int startPage;// 开始页码
    private int endPage;// 结束页码

    private String uri;// 查询分页的地址

    public Page(int currentPageNum, int totalRecords) {
        this.currentPageNum = currentPageNum;
        this.totalRecords = totalRecords;
        // 计算总页数
        totalPage = totalRecords % pageSize == 0 ? totalRecords / pageSize : totalRecords / pageSize + 1;
        // 计算每页开始记录的索引
        startIndex = (currentPageNum - 1) * pageSize;

        // 计算开始页码和结束页码:与当前页码有关

        /*
         * 动态显示页码
         * 当前页码 应该显示的样子 默认 1 2 3 4 5 2 1 2 3 4 5 4 2 3 4 5 6 7 5 6 7 8 9 9 6 7 8
         * 9 10
         */
        if (totalPage > 5) {
            // 超出5页
            startPage = currentPageNum - 2;
            endPage = currentPageNum + 2;

            if (startPage < 1) {
                startPage = 1;
                endPage = 5;
            }

            if (endPage > totalPage) {
                endPage = totalPage;
                startPage = totalPage - 4;
            }

        } else {
            // 总共没有5页
            startPage = 1;
            endPage = totalPage;
        }

    }

    public int getStartPage() {
        return startPage;
    }

    public void setStartPage(int startPage) {
        this.startPage = startPage;
    }

    public String getUri() {
        return uri;
    }

    public void setUri(String uri) {
        this.uri = uri;
    }

    public int getEndPage() {
        return endPage;
    }

    public void setEndPage(int endPage) {
        this.endPage = endPage;
    }

    public List getRecords() {
        return records;
    }

    public void setRecords(List records) {
        this.records = records;
    }

    public int getCurrentPageNum() {
        return currentPageNum;
    }

    public void setCurrentPageNum(int currentPageNum) {
        this.currentPageNum = currentPageNum;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getTotalRecords() {
        return totalRecords;
    }

    public void setTotalRecords(int totalRecords) {
        this.totalRecords = totalRecords;
    }

    public int getStartIndex() {
        return startIndex;
    }

    public void setStartIndex(int startIndex) {
        this.startIndex = startIndex;
    }

    public int getPrePageNum() {
        prePageNum = currentPageNum - 1;
        if (prePageNum < 1)
            prePageNum = 1;
        return prePageNum;
    }

    public void setPrePageNum(int prePageNum) {
        this.prePageNum = prePageNum;
    }

    public int getNextPageNum() {
        nextPageNum = currentPageNum + 1;
        if (nextPageNum > totalPage)
            nextPageNum = totalPage;
        return nextPageNum;
    }

    public void setNextPageNum(int nextPageNum) {
        this.nextPageNum = nextPageNum;
    }

}

页面

     <div class="left">
        <c:forEach items="${page.records}" var="ar">
            <dl>
                <dt>${ar.id}</dt>
                <dd>
                    <span>${ar.name}</span> ${ar.content}
                    <p><em></em></p>
                </dd>
            </dl>
        </c:forEach>

        <%--总页数大于1,显示分页,这里分页代码可以抽取出来,这样就可以实现代码的重用--%>
        <c:if test="${page.totalPage>1}">
        <div class="page">
            <ul>
                <li><a href="${pageContext.request.contextPath}/${page.uri}?pageNum=${page.prePageNum}">上一页</a></li>
                <c:forEach begin="${page.startPage}" end="${page.endPage}" varStatus="vs" var="num">
                    <li class="${page.currentPageNum==num?'check':''}">
                        <a href="${pageContext.request.contextPath}/${page.uri}?pageNum=${num}" >${num}</a>
                    </li>
                </c:forEach>
                <li><a href="${pageContext.request.contextPath}/${page.uri}?pageNum=${page.nextPageNum}">下一页</a></li>
            </ul>
            </c:if>
        </div>
    </div>

访问

http://localhost:8080/SpringBlog//articleAction/findPage.action
具体访问链接看自己的项目

总记录为18条,每页5条记录,分页成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值