PageHelper分页插件实现

APageHelper分页插件使用

第一步,把分页依赖导进来:
 <!--        pagehelper分页插件-->
        <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.11</version>
        </dependency>
第二步:在spring-dao.xml中配置分页插件,使得分页插件部署到数据库里面,然后可以进行使用 ,要在sqlsession工厂里面进行配置
<!--        3.4配置分页插件,使mybatis的分页插件可以使用-->
        <property name="plugins">
            <array>
                <!--  作用就是,当执行查询持久化操作的时候,修改sql语句  -->
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties" value="helperDialect=mysql"/>
                </bean>
            </array>
        </property>
第三步:在service业务层添加分页的接口 【传递两个参数,当前页码和每一页的页数】
/**
     * 分页查询
     * @author  [lin]
     * @param   page
     * @param	pageSize
     * @return  java.util.List<com.q.pojo.Books>
     */
    List<Books> queryAllBookByPage(@Param("page") int page, @Param("pageSize") int pageSize);

第四步:编写业务逻辑类 【这个分页插件就是可以根据传进来的page和pagesize来自动修改sql语句】

//开启分页支持
PageHelper.startPage(page, pageSize);

//调用dao层查询所有
List books = bookMapper.queryAllBook();
//获取分页的相关信息

int prePage = info.getPrePage();

prePage.list 获取所有信息

这三句很重要 在前端获值,就可以传一个对象或者map过去

@Override
public List<Books> queryAllBookByPage(int page, int pageSize) {
    //开启分页支持
    PageHelper.startPage(page, pageSize);
    //调用dao层查询所有
    List<Books> books = bookMapper.queryAllBook();
    //获取分页的相关信息
    PageInfo<Books> info = new PageInfo<>(books);
    System.out.println("获取当前页:"+info.getPageNum());
    System.out.println("获取每一页的页数"+info.getPageSize());
    System.out.println("获取当总页数:"+info.getPages());
    System.out.println("获取总记录数"+info.getTotal());
    System.out.println("获取第一页"+info.getNavigateFirstPage());
    System.out.println("获取最后一页"+info.getNavigateLastPage());
    System.out.println("获取上一页"+info.getPrePage());
    System.out.println("获取下一页"+info.getNextPage());
    System.out.println("获取当前页数据"+info.getList().size());
    return books;
}
第五步:进行测试
  @Test
    public void queryAllBookByPage() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        BookServiceImpl bookServiceImpl = applicationContext.getBean("bookServiceImpl", BookServiceImpl.class);
        bookServiceImpl.queryAllBookByPage(1, 4);
    }

输出结果:

image-20210612143608023

image-20210612143024666


实例补充:

完整配置

spring+springmvc+mybatis+maven中使用PageHelper插件实现分页

1、效果

image-20210614130522587

2、代码部分(使用PageHelper插件实现分页)

(1)、在项目的pom.xml中添加jar包:pagehelper
  分页插件
   <!--        pagehelper分页插件-->
        <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.11</version>
        </dependency>

image-20210614123928600

image-20210614123951360

(2)、在maybatis配置文件中添加一下代码

要注意不要写错位置,要写在mybatis配置文件里面

<!--        3.4配置分页插件,使mybatis的分页插件可以使用-->
        <property name="plugins">
            <array>
                <!--  作用就是,当执行查询持久化操作的时候,修改sql语句              -->
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties" value="helperDialect=mysql"/>
                </bean>
            </array>
        </property>

image-20210614124117478

注意不要写错位置

(3)、在BookMapper.xml中写SQL语句:

写接口的映射文件BookMapper.xml

 <!--查询所有-->
    <select id="queryAllBook" resultType="com.q.pojo.Books">
        SELECT *
        from ssmbuild.books
    </select>

(4)、在dao层,写方法:我的是(BookMapper.java)

/**
     * 查询所有的书  分页查询
     *
     * @return {@link List<Books>}
     *///查询全部Book,返回list集合
    List<Books> queryAllBook();
(5)、在Service层

Service接口代码

/**
 * 分页查询
 * @author  [lin]
 * @param   page
 * @param  pageSize
 * @return  java.util.List<com.q.pojo.Books>
 */

List<Books> queryAllBookByPage();

Service接口实现类中代码

 @Override
    public List<Books> queryAllBookByPage() {
        return bookMapper.queryAllBook();
    }
(6)、在Controller层
  @RequestMapping("/allBook")
    public String queryAllBookByPage(@RequestParam(defaultValue = "1", value = "page") Integer page, Model model) {
        //开启分页插件     //PageHelper.startPage(pageNum, pageSize);
        // 这段代码表示,程序开始分页了,
        // pageNum默认值是1,pageSize默认是10,意思是从第1页开始,每页显示10条记录。
        PageHelper.startPage(page, 3);
        // 查询列表的结果
        List<Books> books = bookService.queryAllBookByPage();
        // 得到分页的结果对象 里面包含分页后是所有信息
        PageInfo<Books> pageInfo = new PageInfo<>(books);

        model.addAttribute("page", pageInfo);
        System.out.println(pageInfo.getList());
        return "allBook";
    }
(@RequestParam(defaultValue = "1", value = "page") Integer page, Model model)
 
 这个配置很重要,设定默认值 那个page要用integer类型,因为当page为null的时候就不会报错。
(7)、测试

测试类中的代码如下:

    @Test
    public void queryAllBookByPage() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        BookServiceImpl bookServiceImpl = applicationContext.getBean("bookServiceImpl", BookServiceImpl.class);
        List<Books> books = bookServiceImpl.queryAllBookByPage();
        PageHelper.startPage(1, 3);
        PageInfo<Books> pageInfo = new PageInfo<>(books);
        List<Books> list = pageInfo.getList();
        System.out.println(list);//输出所有信息
        System.out.println(pageInfo.getPageSize());
    }

打印结果:

image-20210614130058722

前端页面:

获取分页后的信息也很重要,很容易会出错,注意

 <div class="row clearfix">
        <div class="col-md-15 column">
            <table class="table table-hover table-striped">
                <thead>
                <tr>
                    <th>书籍编号</th>
                    <th>书籍名字</th>
                    <th>书籍数量</th>
                    <th>书籍详情</th>
                    <th>操作</th>
                </tr>
                </thead>
                <tbody>
                <c:forEach var="book" items="${page.list}">
                    <tr>
                        <td>${book.bookId}</td>
                        <td>${book.bookName}</td>
                        <td>${book.bookCounts}</td>
                        <td>${book.detail}</td>
                        <td id="admin2">
                            <a id="" class=" btn btn-warning  "
                               href="${pageContext.request.contextPath}/book/toUpdateBook/${book.bookId}"><i
                                    class="glyphicon glyphicon-floppy-saved"></i>修改</a>
                            |
                            <a id="admin3" class=" btn btn-warning "
                               href="${pageContext.request.contextPath}/book/deleteBook/${book.bookId}"
                               οnclick="return del()"><i class="glyphicon glyphicon-trash"></i> 删除</a>
                            <a id="admin4" class=" btn btn-warning "
                               href="${pageContext.request.contextPath}#"><i class="glyphicon glyphicon-bed"></i> 加入购物车</a>
                        </td>
                    </tr>
                </c:forEach>
                </tbody>
            </table>


        </div>
        <div align="center">

            <div class="col-md-6">第 ${page.pageNum} 页,共${page.pages}页,${page.total} 条记录</div>
            <a href="${pageContext.request.contextPath}/book/allBook/?page=1">首页</a>

            <c:choose>

                <c:when test="${page.pageNum - 1 > 0}">

                    <a href="${pageContext.request.contextPath}/book/allBook/?page=${page.pageNum - 1}">上一页</a>

                </c:when>

                <c:when test="${page.pageNum - 1 <= 0}">

                    <a href="${pageContext.request.contextPath}/book/allBook/?page=1">上一页</a>

                </c:when>

            </c:choose>


            <c:choose>

                <c:when test="${page.pages==0}">

                    <a href="${pageContext.request.contextPath}/book/allBook/?page=${page.pageNum}">下一页</a>

                </c:when>

                <c:when test="${page.pageNum + 1 < page.pages}">

                    <a href="${pageContext.request.contextPath}/book/allBook/?page=${page.pageNum + 1}">下一页</a>

                </c:when>

                <c:when test="${page.pageNum + 1 >= page.pages}">

                    <a href="${pageContext.request.contextPath}/book/allBook/?page=${page.pages}">下一页</a>

                </c:when>

            </c:choose>

            <c:choose>

                <c:when test="${page.pages==0}">

                    <a href="${pageContext.request.contextPath}/book/allBook/?page=${page.pageNum}">尾页</a>

                </c:when>

                <c:otherwise>

                    <a href="${pageContext.request.contextPath}/book/allBook/?page=${page.pages}">尾页</a>

                </c:otherwise>

            </c:choose>

        </div>

    </div>

OK!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值