手把手教你SpringBoot+pagehelper实现分页效果

今天,我们用springboot来实现pagehelper插件分页效果,ssm项目同样适用,项目是Maven项目,前端使用Thymeleaf。

首先,先引用pom依赖,此依赖同适用于springboot与ssm,非Maven项目可以导入JAR包

<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper-spring-boot-starter</artifactId>
  <version>1.2.3</version>
</dependency>

spring boot需要在application.properties加入配置

pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql

在dao层以注解的形式写一个查询所有信息的方法。

@Mapper
public interface ShopMapper {
    //查询所有
    @Select("SELECT * FROM shop")
    List<Shop> all();
    }

然后service层调用dao层

@Service
public class ShopService {


    @Autowired
    ShopMapper shopMapper;


    //查看所有接口
    public List<Shop>all(){
        return shopMapper.all();
    }

控制器端,pageNum是显示当前在第几页

@Controller
public class ShopController(){
@Autowired
    ShopService shopService;

@RequestMapping("/cc")
public String index(Model model,@RequestParam(defaultValue = "1") Integer pageNum){
    PageHelper.startPage(pageNum,5);
    System.out.println("开始查询");
    List<Shop> list = shopService.all();
    PageInfo<Shop> pageInfo = new PageInfo<>(list);
    System.out.println(pageInfo);
    model.addAttribute("pageInfo",pageInfo);
    return "shop/test1";
}
}

前端页面遍历商品信息

<div th:each="items : ${pageInfo.list}">
<li>
<img th:src="${items.shopimg}">
<p th:text="${items.shopprice}" ></p>
</li>
</div>              

前端页面实现分页组件及逻辑,这里用的是bootstrap样式

        <div class="pager" style=" position:absolute; margin-right:510px; right:15%; top:1320px; cursor:pointer;">
            <ul class="pagination">
                <li class="page-item" th:if="${pageInfo.pageNum!=1}"><a class="page-link"
                                                                        th:href="@{/cc(pageNum=1)}">首页</a></li>
                <li class="page-item" th:if="${pageInfo.pageNum!=1}"><a class="page-link"
                                                                        th:href="@{/cc(pageNum=${pageInfo.hasPreviousPage}?${pageInfo.prePage}:${pageInfo.pages})}">上一页</a>
                </li>
                <li class="page-item"><a class="page-link"><span th:text="第+${pageInfo.pageNum}+页"></span></a></li>
                <li class="page-item"><a class="page-link"><span th:text="共+${pageInfo.pages}+页"></span></a></li>
                <li class="page-item" th:if="${pageInfo.pageNum != pageInfo.pages}"><a class="page-link"
                                                                                       th:href="@{/cc(pageNum=${pageInfo.hasNextPage}?${pageInfo.nextPage}:${pageInfo.pages})}">下一页</a>
                </li>
                <li class="page-item" th:if="${pageInfo.pageNum != pageInfo.pages}"><a class="page-link"
                                                                                    th:href="@{/cc(pageNum=${pageInfo.pages})}">尾页</a>
                </li>
            </ul>
            <div>

页面显示

在这里插入图片描述
至此,分页完成,下面给出代码的详细解释。

代码详解

PageHelper.startPage(pageNum,5);
 List<Shop> list = shopService.all();

startPage里面的pageNum是当前显示页,我们默认显示页都是第一页,所以控制器的参数默认赋值了一个1,后面的5便是每页显示信息的条数。

切记startPage要放在查询语句的前面,否则分页功能将无法实现!!

因为PageHelper可以获取到同一线程中的预编译好的SQL语句,之后将SQL语句包装成具有分页功能的SQL语句,并将其再次赋值给下一步操作,所以实际执行的SQL语句默认先执行两条数据库语句:select count(0)以及在原有语句后加的LIMIT。
原本查询的语句多了count和limit,这是startPage的预编译sql语句

下面这条代码就是将查询到的list封装到PageInfo类里面的list集合。

  PageInfo<Shop> pageInfo = new PageInfo<>(list);

我们可以Crtl+鼠标点击看一下PageInfo的类,里面有很多封装的数据信息
里面有很多封装的数据信息
打印一下pageInfo瞧瞧,可以看到所有的分页信息都能打印出来。

 PageInfo<Shop> pageInfo = new PageInfo<>(list);
 System.out.println(pageInfo);
PageInfo{pageNum=1, pageSize=8, size=8, startRow=1, endRow=8, total=39, pages=5, list=Page{count=true, pageNum=1, pageSize=8, startRow=0, endRow=8, total=39, pages=5, reasonable=false, pageSizeZero=false}, prePage=0, nextPage=2, isFirstPage=true, isLastPage=false, hasPreviousPage=false, hasNextPage=true, navigatePages=8, navigateFirstPage=1, navigateLastPage=5, navigatepageNums=[1, 2, 3, 4, 5]}

pageHelper操作简单,适用于ssm以及springBoot等项目,重点是在控制器调用startPage方法和将信息封装到pageInfo在前端显示,希望这篇文章对正在学习分页的你有所帮助!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值