PageHelper+springBoot用法

PageHelper+SpringBoot分页

  1. 添加依赖

  <!-- pagehelper-spring-boot-starter -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>
        
          <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

2. 配置 (这里选择yml配置)

#pagehelper配置
pagehelper:
  # 选择数据库类型
  helper-dialect: mysql
  #是否开启合理化分页
  reasonable: true

3.为了方便使用 建立一个PageParams类存放分页参数(pageSize数量,pageNum当前页)

public class PageParams {
    
    
    private Integer pageNum;数量
    private Integer pageSize;当前页
    //自己生成set,get方法 。。。
}

4.Controller里需要使用分页的方法里接收前端数据

​ !!!注意在接下来使用中PageParams一定要导自己刚刚创建的

import com.jiazhong.office.commons.PageParams;
@RestController
@RequestMapping("/rbac/account/")
public class AccountController {
    
    
    @Autowired
    private AccountService accountService;
    
    @GetMapping("getAccountList")
    public Map<String, Object> getAccountList(PageParams pageParams){
    
    
        return  accountService.getAccountList(pageParams);
    }
}

5.serviceImpl类

​ 分页三部曲

   @Override
    public Map<String, Object> getAccountList(PageParams pageParams) {
    
    
        //1 开启分页 传入参数
        PageHelper.startPage(pageParams);
        //2 数据库获取数据
        List<AccountView> accountViewList = accountDao.getAccountList();
         //3 用PageInfo对结果进行包装
        PageInfo pageInfo = new PageInfo(accountViewList);
		
        
        //存入并返回一个map集合
        Map<String,Object> map = new HashMap<>();
        map.put("total",pageInfo.getTotal());
        map.put("accountList",pageInfo.getList());

        return map;
    }

6.前端实现举例(这里使用Element组件)

<template>
  <div class="user-data-list">
      <el-table :data="accountList" border style="width: 100%">
        <el-table-column type="index" label="序号" align="center" width="50">
        </el-table-column>

        <el-table-column prop="account_name" label="用户名" align="center">
        </el-table-column>
      </el-table>
   </div>

<!-----------------------------分页条------------------------------------->
    <div class="pagination-div">
        <!--
           layout:设置分页条的显示内容
               sizes:设置显示每页可选记录数列表
               prev:上一页图标
               pager:页面图标
               next:下一页图标
               jumper:跳转到某一页
               ->:指定下一个元素的显示为最右边
            total:总记录数
              @current-change="页面改变时执行"
              @size-change="页面数量改变时执行"
       -->
        <el-pagination
                background
                layout="sizes,prev, pager, next,jumper,->,total"
                :total="total"
                :page-size.sync="pageParams.pageSize"
                :current-page.sync="pageParams.pageNum"
                :page-sizes="pageSizes"
                @current-change="getAccountList"
                @size-change="getAccountList">
            >
        </el-pagination>
    </div>
    <!-----------------------------分页条-------------------------------------> 
  <template> 
 <script>

import qs from "qs"
export default {
     
     
  data() {
     
     
    return {
     
     
      accountList: [], //账户列表(用户列表)
      pageParams:{
     
     
        pageSize:5,//每页条数
        pageNum:1//当前页
      },
      total:100,//总记录条数
      pageSizes:[5, 10, 15],
    };
  },
  methods: {
     
     
    /**
     * 获得账户列表
     */
    getAccountList() {
     
     
      this.$axios
        .get("/rbac/account/getAccountList",{
     
     params:this.pageParams})
        .then((response) => {
     
     
          let result = response.data;
          this.total=result.total;
          this.accountList = result.accountList;
          console.log(this.accountList);
        })
        .catch((err) => {
     
     
          alert(err);
        });
    },   
   mounted() {
     
     
    //获得账户列表
    this.getAccountList();
  },
};
</script>

原理

pageHelper会使用ThreadLocal获取到同一线程中的变量信息,各个线程之间的Threadlocal不会相互干扰,也就是Thread1中的ThreadLocal1之后获取到Tread1中的变量的信息,不会获取到Thread2中的信息
所以在多线程环境下,各个Threadlocal之间相互隔离,可以实现,不同thread使用不同的数据源或不同的Thread中执行不同的SQL语句
所以,PageHelper利用这一点通过拦截器获取到同一线程中的预编译好的SQL语句之后将SQL语句包装成具有分页功能的SQL语句,并将其再次赋值给下一步操作,所以实际执行的SQL语句就是有了分页功能的SQL语句

猜你喜欢

转载自blog.csdn.net/weixin_45894479/article/details/114356763