MybatisPlus实现单表数据分页功能

一个菜鸡,分页搞了一天,总算是搞出来了,现在记录一下过程。

1.Mybatis配置类

在com.sunset.system.config下新建MyBatisConfig.class。代码如下:

@Configuration
@ConditionalOnClass(value = {PaginationInnerInterceptor.class})
public class MybatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }
}

2.控制器方法

声明一下,前端需要传入到控制器的值有当前页码和页码的大小。具体如下:

@GetMapping("/getUserList")
@ApiOperation(value="获取用户信息",notes="从后端获取所有用户信息")
public Map<String,Object> getUserList(@RequestParam(required = true,defaultValue = "1")Integer current,
                                      @RequestParam(required = true,defaultValue = "4")Integer size){
    Map<String,Object> map = new HashMap<>();
    Page<User> page = new Page<>(current,size);
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    IPage<User> userPage = userService.findUserPage(page,wrapper);
    long total = userPage.getTotal();
    List<User> users = userPage.getRecords();
    log.info("users:[{}]",users.toString());
    map.put("users",users);
    map.put("total",total);
    map.put("state",true);
    map.put("msg","查找用户成功");
    return map;
}

3.其他层代码

在userService和userServiceImpl类中代码如下:

//UserService
IPage<User> findUserPage(Page<User> page, QueryWrapper<User> wrapper);
//UserServiceImpl.java
@Override
public IPage<User> findUserPage(Page<User> page, QueryWrapper<User> wrapper) {
    return this.baseMapper.selectPage(page,wrapper);
}

至此,后端代码大功告成,接下来是前端代码。

4. 前端分页插件

<el-pagination
        style="padding-top: 15px"
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page="current"
        :page-sizes="[4, 6, 10, 20]"
        :page-size="size"
        layout="total, sizes, prev, pager, next, jumper"
        :total="total">
</el-pagination>

获取用户信息的函数:

<script>
    export default {
        name: "Welcome",
        data(){
            return {
                users: [],
                current: 1,
                size: 4,
                total: 100,
            }
        },
        created() {
          this.getUserList();
        },
        methods:{
            async getUserList(){       this.$axios.get("http://localhost:8087/user/getUserList?current="+this.current+"&size="+this.size).then(res =>{
                        this.users = res.data.users;
                        this.total = res.data.total;
                        console.log(res);
                        console.log(res.data.users.length);
                })
            },
            handleSizeChange(val){
                this.size = val;
                this.getUserList();
            },
            handleCurrentChange(val){
                this.current = val;
                this.getUserList();
            }
        }
    }
</script>

大功告成,本菜鸡着实不易,写代码太难了,又摸鱼又钻研,下面是效果图:
在这里插入图片描述
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值