Springboot中使用pageHelper插件

Springboot中使用pageHelper插件

​ 都知道pagehelper是一个MyBatis的分页插件,其实在如今的前后端分离项目中,我们使用该插件的机会并不多。但我还是觉得这部分内容还是应该学习和掌握的,毕竟我们应该善其身而兼济天下。

​ ok,我准备从以下几个方面来说一下pagehelper。

  1. 优点

    无需你自己去封装以及关心sql分页等问题,使用很方便,前端取数据也很方便。

    我们都知道传统的SQL分页逻辑,Mysql的话要使用limit子句来限制每次读取的记录数以及每次开始读取的位置,多次的sql语句查询是不可避免的,甚至是pagehelper也是一样,不同的是,pagehelper只需要传入第几页以及每页记录数,当调用startPage方法后,会返回一个Page集合,该集合中会包含许多我们需要的数据,总记录条数,分出的总页数等等。而这些内容,使用传统方式,仍然还是需要再度进行数据库查询,执行效率自不必说。

    Springboot中使用pageHelper插件_第1张图片

  2. 如何使用

    1. 引入(maven方式)

       		<dependency>
                  <groupId>com.github.pagehelpergroupId>
                  <artifactId>pagehelper-spring-boot-starterartifactId>
                  <version>1.2.10version>
              dependency>
      
    2. service层使用

       public pageDTO getPage(Integer page, Integer size) {
               
              pageDTO pageDTO = new pageDTO();
      
              Page<Object> objects = PageHelper.startPage(page, size, true);
              List<QuestionDTO> questions = getAll();
              PageInfo<QuestionDTO> pageInfo = new PageInfo<>(questions);
           
      		//容错处理
              if(page>=objects.getPages()){
               
                  page=objects.getPages();
              }
              if(page<=0){
               
                  page=1;
              }
      		//需要使用的page对象中的信息,需要在两次sql查询结束之后在进行,否则取到的结果就是当前页的结果。
              pageDTO.setNowPage(page);
              pageDTO.setTotalPage(objects.getPages());
              pageDTO.setSinglePage(page,(int) objects.getPages());
              pageDTO.setQuestions(pageInfo.getList());
      
              return pageDTO;
          }
      

      我在该部分使用的pageDTO用于数据封装,可不做理解(大后端技术,数据封装处理基本交由后端完成)。

为凑篇幅,下面部分开始偏题

页面查询数据的封装,主要是为了封装首尾页以及上下页。

@Component
@Data
public class pageDTO {
     
    private List<QuestionDTO> questions = new ArrayList<>();
    private boolean hasPrevious=true;//上一页
    private boolean hasNext=true;//下一页
    private boolean showFirstPage=true;//首页
    private boolean showEndPage=true;//尾页
    private Integer totalPage;//总页数

    private Integer nowPage;
    private List<Integer> pages = new ArrayList<>();

    public void setSinglePage(int page,int total){
     
        //第一页不含有首页和上一页的选项
        if(nowPage==1){
     
            hasPrevious=false;
        }
        if(nowPage==total){
     
            hasNext=false;
        }
        //尾页与首页相反
        if(pages.contains(1)){
     
            showFirstPage = false;
        }
        if(pages.contains(total)){
     
            showEndPage = false;
        }

        pages.add(page);
        //页面列表的封装逻辑
        for(int i=1;i<=3;i++){
     
            if(page-i>0){
     
                pages.add(0,page-i);
            }
            if(page+i<=total){
     
                pages.add(page+i);
            }
        }
    }
}

前端展示

 <ul class="pagination">
                    <li th:if="${questionList.showFirstPage}">
                        <a href="/index?page=1" aria-label="Previous">
                            <span aria-hidden="true">«span>
                        a>
                    li>
                    <li th:if="${questionList.hasPrevious}">
                        <a th:href="@{/index(page=${questionList.nowPage}-1)}" aria-label="Previous">
                            <span aria-hidden="true"><span>
                        a>
                    li>

                    <li th:each="page:${questionList.pages}" >
                        <a th:href="@{/index(page=${page})}" th:if="${page}==${questionList.nowPage}" class="active">[[${page}]]a>
                        <a th:href="@{/index(page=${page})}" th:if="${page}!=${questionList.nowPage}">[[${page}]]a>
                    li>


                    <li th:if="${questionList.hasNext}">
                        <a th:href="@{/index(page=${questionList.totalPage})}" aria-label="Previous">
                            <span aria-hidden="true">>span>
                        a>
                    li>
                    <li th:if="${questionList.showEndPage}">
                        <a th:href="@{/index(page=${questionList.nowPage}+1)}" aria-label="Next">
                            <span aria-hidden="true">»span>
                        a>
                    li>

                ul>

效果不截图。

你可能感兴趣的:(java,sql)