springboot 中 分页实现

【SpringBoot】SpringBoot中分页插件(PageHelper)的使用 接受请求,请求数据=页码+每页数量+查询条件(非必须)调用业务层完成分页查询将结果响应给前端调用PageHelper中的 startPage(参数页码,每页数量) 方法,然后返回一个Page对象。调用数据层完成分页查询直接用Page对象中的方法封装结果(数据+数量)返回给controller层直接动态SQL拼接带查询条件的查询(SQL语句中不用使用limit)【原理介绍】流程其实是一样的,只是该插件在内部封装了一些方法供我们使用。 阅读详情

本次要讲的是典型的两种分页方式,即sql分页和插件分页。

一、sql分页

基于sql语句的分页,不需要特殊依赖。

1.1 依赖

因为使用了mybatis、mysql ,所以要添加相关依赖。这里版本没有特别需求,选择你想要的版本即可。

			 <!--mybatis-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis-version}</version>
            </dependency>

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql-version}</version>
            </dependency>

本人使用的版本:

 <mybatis-version>1.3.1</mybatis-version>
 <mysql-version>5.1.32</mysql-version>

1.2 Dao层

在ArticleMapper .java中,分页函数如下:

package com.sqlb.mapper;

import com.sqlb.pojo.Article;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;
import java.util.Map;

@Mapper
public interface ArticleMapper {


    /**
     *sql 分页
     */
    List<Article> list(Map<String, Object> map); 
}

对应的ArticleMapper .xml中如下:

  <select id="list" resultType="com.sqlb.pojo.Article">
        select
        <include refid="Base_Column_List"/>
        from article
        <where>
            <if test="id != null and id != ''">and id = #{id}</if>
            <if test="author != null and author != ''">and author = #{author}</if>
            <if test="createTime != null and createTime != ''">and create_time = #{createTime}</if>
            <if test="typeName != null and typeName != ''">and type_name = #{typeName}</if>
            <if test="imageUrl != null and imageUrl != ''">and image_url = #{imageUrl}</if>
            <if test="content != null and content != ''">and content = #{content}</if>
        </where>
        <choose>
            <when test="createTime != null and createTime.trim() != ''">
                order by ${createTime}
            </when>
            <otherwise>
                order by id desc
            </otherwise>
        </choose>
        <if test="offset != null and limit != null">
            limit #{offset}, #{limit}
        </if>
    </select>

1.3 Service层

@Service
public class ArticleServiceImpl implements ArticleService {

    @Autowired
    private ArticleMapper articleMapper;

    @Override
    public List<Article> list(Integer pageNum, Integer pageSize) {
        return articleMapper.list(PageParam.getParams(pageNum, pageSize));
    }
}

1.4 Controller层

@Controller
@RequestMapping("/article")
public class ArticleController {

    @Autowired
    ArticleService articleService;

    @ResponseBody
    @RequestMapping("/list")
    public List<Article> list(@RequestParam(defaultValue = "1",value = "currentPage") Integer pageNum,
                              @RequestParam(defaultValue = "10",value = "pageSize") Integer pageSize){
        return articleService.list(pageNum,pageSize);
    } 
}

当然,使用mybatis记得在application.yml中配置一把,以及mysql数据连接池配置。

mybatis:
  configuration:
    map-underscore-to-camel-case: true
  mapper-locations: mybatis/*/*Mapper.xml
  type-aliases-package: com.sqlb.pojo

mysql数据连接池配置这里就不用多说了吧。不知道的,就赶紧去学习下基础知识。

Article类和表结构

  • Article类
import java.util.Date;

public class Article {
    private Integer id;

    private String author;

    private Date createTime;

    private String typeName;

    private String imageUrl;

    private String content;

	  //此处省去get、set方法
}
  • 表结构
CREATE TABLE `article` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id编号',
 `content` text NOT NULL COMMENT '文章内容,代码控制不可超过1000字',
 `author` varchar(128) DEFAULT NULL COMMENT '作者',
 `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
 `type_name` enum('0','1','2','3','4') NOT NULL DEFAULT '1' COMMENT '文章类型',
 `image_url` varchar(255) DEFAULT NULL COMMENT '图片地址',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4;

sql分页就是这么多了,运行访问http://localhost:8081/article/list可以得到你想要的数据。

二、插件分页

显然,这种方法是要导入第三方jar包的,具体方法如下。

2.1 插件依赖

		   <!--分页插件-->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>${pagehelper-version}</version>
            </dependency>

这里要说明一下,本人使用的版本是:

<pagehelper-version>1.1.1</pagehelper-version>

本人开始使用的是当前最新版本1.2.4,本人这里不行,内部原因不详。您如果使用抛错的话,建议可以切换不同版本试试。

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

2.2 配置

springboot最大的特色就是只需简单的配置,就可以进行快捷的开发,配置如下:

pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true
  params: count=countSql

需要特别注意的是pagehelper.reasonable=true时,当页码增加时,如果没有分页数据了,会一直返回最后一页的数据。建议使用pagehelper.reasonable=false

2.3 Dao层

ArticleMapper .java

import com.github.pagehelper.Page;
import com.sqlb.pojo.Article;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;
import java.util.Map;

@Mapper
public interface ArticleMapper {

    /**
     * 插件 分页 查询表中部分字段
     */
    Page<Article> findByPage();
    /**
     * 插件 分页  查询表中所有字段
     */
    Page<Article> findWithBLOBsByPage();

}

ArticleMapper .xml

    <select id="findByPage" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from article
    </select>
    <select id="findWithBLOBsByPage" resultMap="ResultMapWithBLOBs">
        select
        <include refid="Base_Column_List"/>
        ,
        <include refid="Blob_Column_List"/>
        from article
    </select>

这里有两个分页,不同点就是findWithBLOBsByPage把所有的字段都查询出来了,而findByPage相比之下少查询了一个字段。这里需要提出的是,本人的使用findByPage查询部分字段时,会报java.lang.NoSuchMethodException错误,具体原因暂时不详,以后明白了再记出来,如果哪个大神明白细节的还望不吝赐教~~~

2.4 Service层

此处才用到PageHelper插件


import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.sqlb.mapper.ArticleMapper;
import com.sqlb.pojo.Article;
import com.sqlb.service.ArticleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class ArticleServiceImpl implements ArticleService {

    @Autowired
    private ArticleMapper articleMapper;  

    @Override
    public Page<Article> findByPage(Integer pageNum, Integer pageSize) {
        //用插件进行分页
        PageHelper.startPage(pageNum, pageSize);
        return articleMapper.findByPage();
    }

    @Override
    public Page<Article> findWithBLOBsByPage(Integer pageNum, Integer pageSize) {
        //用插件进行分页
        PageHelper.startPage(pageNum, pageSize);
        return articleMapper.findWithBLOBsByPage();
    }
}

2.5 Controller层

首先要创建一个返回给前端的pojo对象,新建一个分页数据类PageInfo:

import com.github.pagehelper.Page;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
 * @描叙: 分页 数据结构
 */
public class PageInfo<T> implements Serializable {
    private static final long serialVersionUID = 1L;
    //当前页
    private int pageNum;
    //每页的数量
    private int pageSize;
    //总记录数
    private long total;
    //总页数
    private int pages;
    //结果集
    private List<T> list;
    //是否为第一页
    private boolean isFirstPage = false;
    //是否为最后一页
    private boolean isLastPage = false;


    public PageInfo() {
    }

    /**
     * 包装Page对象
     *
     * @param list
     */
    public PageInfo(List<T> list) {
        if (list instanceof Page) {
            Page page = (Page) list;
            this.pageNum = page.getPageNum();
            this.pageSize = page.getPageSize();

            this.pages = page.getPages();
            this.list = page;
            this.total = page.getTotal();
        } else if (list instanceof Collection) {
            this.pageNum = 1;
            this.pageSize = list.size();

            this.pages = 1;
            this.list = list;
            this.total = list.size();
        }
        if (list instanceof Collection) {
            //判断页面边界
            judgePageBoudary();
        }
    }

    /**
     * 判定页面边界
     */
    private void judgePageBoudary() {
        isFirstPage = pageNum == 1;
        isLastPage = pageNum == pages;
    }

    public int getPageNum() {
        return pageNum;
    }

    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public long getTotal() {
        return total;
    }

    public void setTotal(long total) {
        this.total = total;
    }

    public int getPages() {
        return pages;
    }

    public void setPages(int pages) {
        this.pages = pages;
    }

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public boolean isIsFirstPage() {
        return isFirstPage;
    }

    public void setIsFirstPage(boolean isFirstPage) {
        this.isFirstPage = isFirstPage;
    }

    public boolean isIsLastPage() {
        return isLastPage;
    }

    public void setIsLastPage(boolean isLastPage) {
        this.isLastPage = isLastPage;
    }

    @Override
    public String toString() {
        final StringBuffer sb = new StringBuffer("PageInfo{");
        sb.append("pageNum=").append(pageNum);
        sb.append(", pageSize=").append(pageSize);
        sb.append(", total=").append(total);
        sb.append(", pages=").append(pages);
        sb.append(", list=").append(list);
        sb.append(", isFirstPage=").append(isFirstPage);
        sb.append(", isLastPage=").append(isLastPage);
        sb.append(", navigatepageNums=");
        sb.append('}');
        return sb.toString();
    }
}

ArticleController.java中,数据转换如下:

import com.github.pagehelper.Page;
import com.sqlb.pojo.Article;
import com.sqlb.pojo.PageInfo;  //刚才新建的分页数据对象
import com.sqlb.service.ArticleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
@RequestMapping("/article")
public class ArticleController {

    @Autowired
    ArticleService articleService;

    @ResponseBody
    @RequestMapping("/page")
    public PageInfo<Article> findWithBLOBsByPage(@RequestParam(defaultValue = "1",value = "currentPage") Integer pageNum,
                              @RequestParam(defaultValue = "10",value = "pageSize") Integer pageSize){

        Page<Article> articles = articleService.findWithBLOBsByPage(pageNum, pageSize);
        // 需要把Page包装成PageInfo对象才能序列化。该插件也默认实现了一个PageInfo
        PageInfo<Article> pageInfo = new PageInfo<>(articles);
        return pageInfo;
    }
}

插件分页就是这么多了,运行访问http://localhost:8081/article/list可以得到你想要的数据。

SpringBoot+Mybatis+Oracle分页实现         在日常开发中,对数据的分页实现是在所难免的,而分页可以通过原始的方法来实现,也可以使用相应的分页插件。 Idea工程目录如下: 实体类: 数据库字段类: package com.per.springtest.entity; import lombok.Data; /** * Created with In... 阅读详情

相关推荐

springboot+mybatis实现分页

分页成果展示:www.qihea.xyz 1.整合mybatis框架 1.数据库准备好数据:我网站中的数据时通过python爬虫,直接保存到数据库中的。图片直接保存的豆瓣的url。 2.整合mybatis依赖和mybatis分页插件: 根据此教程完成初步操作:Kotlin+IDEA+SpringBoot+MyBatis+MySQL+Gradle项目(不要选择kotlin即可) 然后添...

七和 3607

springboot实现分页功能

引入pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd

xingchenyv的博客 2万+

如何使用 Spring Boot 实现分页和排序?

通过 Spring Data JPA 提供的和PageableSort接口,我们可以非常方便地实现分页和排序功能。Spring Boot 让分页和排序操作变得更加简洁和高效,减少了开发中的繁琐代码。Pageable主要用于分页,可以创建分页请求。Sort主要用于排序,用于指定排序字段和排序方式。使用方法可以轻松获取分页数据。这种方式使得我们能够在 Spring Boot 项目中非常便捷地实现数据的分页查询和排序功能。… …

喵手的博客 1368

SpringBoot实现分页的四种方式

SpringBoot实现分页的四种方式

小钟不想敲代码 4万+

Spring boot框架实现分页(附Spring boot文档)

不是为已解决的问题域提供新的解决方案,而是用来简化spring应用的初始搭建以及开发过程。从最根本上来讲,Spring Boot就是一些库的集合,它能够被任意项目的构建系统所使用。

SPI 协议帧格式深度解析:从 8 位数据到 16 位扩展的 3 种模式

本文深入解析SPI协议的帧格式,涵盖从8位标准到16位扩展的三种模式。通过详细讲解SPI时钟模式、数据宽度配置及实际应用案例,帮助开发者掌握SPI外设的深度定制能力,提升嵌入式系统开发效率。特别适用于连接传感器、存储器和显示器等高速通讯场景。

weixin_34110749的博客 345

SpringBoot实现分页查询

前言

CoCo629vanilla的博客 1万+

win10离线安装.NetFrameWork3.5出现0x800F081F解决办法。

由于公司开发环境是内网,并且安装arcgis10.2又需要.NetFrameWork3.5的环境,安装.NetFrameWork3.5的又总是报错“0x800F081F”找不到源文件。折腾了两天总算解决了。 首先我们能在网上搜索到的教程,你一定看到过这样的教程,就是使用下面的命令来进行安装。 dism /online /Enable-Feature /Featu...

AIGIS的博客 1万+

Spring Boot之(七)基于Spring Boot分页组件的分页查询的实现

七、基于Spring Boot分页组件的分页查询的实现 在实际的项目开发过程中,分页显示是很常见的页面布局,所以学习如何实现分页也是必要的。 在前面的数据库学习中,我们都知道,要想在前端页面中实现分页显示,就必须依赖于数据库中的分页查询语句。我们也都知道,Mysql数据库中的查询也只不过在查询语句中添加限制条件即可,但是在Oracle中的分页查询中,我们要写好几层嵌套语句才可以实现。 但是,在Spring Boot中直接给我们提供了一种分页组件,我们只需按照他的规则拿来使用就可以了,下面我们一起来学习怎么使

qq_50994235的博客 6226

VCS HVP与验证计划planner:数字IC验证环境搭建与收敛实践

在数字IC验证中,VCS 是广泛使用的编译型仿真器,HVP 通常指面向硬件验证平台的高性能编译选项集,用于开启 SystemVerilog 类、随机约束和 NTB 等能力;planner 则指验证计划管理,核心是把功能点与测试用例、覆盖点建立映射。理解 VCS 先编译后仿真的原理,有助于优化增量编译、调试访问和覆盖率采集,提升回归收敛效率。规划驱动让激励不再散落,设计改版时能快速定位受影响用例,交接和覆盖率收敛更有依据。无论是 UVM 环境搭建、编译参数选择,还是验证计划表维护,都需要把工具选项与规划方法结

weixin_42543046的博客 336

树莓派4B学习笔记(5)—— 来个GPIO操作吧

一. GPIO库介绍 对于树莓派,现在有wiringPi,BCM2835,python三种库可以使用。 python 开发语言:python 简单介绍:树莓派官方资料中推荐且容易上手,毫无疑问的说python非常适合树莓派,树莓派也非常适合python。 wiring PI 开发语言:C、C++ 简单介绍:功能很强大,适合那些具有C语言基础,在接触树莓派之前已经接触过单片机或者嵌入式开发的人群。wiring Pi的API函数和arduino非常相似,且作者也给出了很多示例代码,这也使得它广受欢迎。

weixin_44415639的博客 8753

springboot+layui实现分页

1.实现分页前导入分页切面 @Component @Aspect public class PageAspect { /** * 环绕通知,作用在对象上 * @param args * @return * @throws Throwable */ @Around(&quot;execution(* *..*Service.*Pager(..)...

qq_43164918的博客 4539

解密TMS320F28377D双核工程中的内存分配艺术:从CMD文件到实战优化

本文深入解析TMS320F28377D双核DSP的内存管理艺术,从CMD文件配置到实战优化技巧。详细介绍了SARAM、GSRAM等内存类型的特性与配置方法,提供双核协同、性能优化及高级调试的实用方案,帮助开发者提升系统实时性和稳定性。

weixin_29190651的博客 662

springBoot 实现分页

前言 以前觉得分页很难,在书上也看到关于分页的,但是很麻烦,要写几个类什么的,技术也有限,于是选择性的忽略掉,但是困难总是要面对的,解决了问题,记录一下。最近发现写博客很好玩,得到认可也很开心,希望和你们一起学习进步! 技术上因为不用写的太复杂,所以没有用MVC思想。后端用的springBoot+mybits+mysql,前端用的thymeleaf框架的html。 配置环境 >>>> 导入依赖:pom.xml <dependencies> <!-- mybati

weixin_44798878的博客 2297

资金穿透分析

我们把准备好的银行数据导入到软件中,导入具体步骤这里不做详解,大家可以通过“清林情报分析师”公众号,查看操作视频第二节

清林情报分析师 3489

第4章-07-将WebDriver获取的Cookie传递给Requests

在使用Selenium WebDriver获取了浏览器的Cookies之后,你可以将这些Cookies传递给requests库,以便在后续的HTTP请求中使用这些Cookies。这样做可以让你模拟浏览器会话,使得请求看起来像是从之前使用Selenium WebDriver控制的浏览器发出的。

黑夜开发者的博客 692

SpringBoot项目学习04之实现分页功能

1.准备工作 为了演示分页效果,首先需要导入大量数据才能体现分页功能的作用;所以,第一步需要导入数据,实验所需的SQL脚本内容较多,这里就不一一展示,其导入后效果如下图。 sql脚本下载地址为:sql下载地址 2.实现分页功能 分页功能的交互流程是前端将所需页码page和每页展示条数limit两个参数传输给后端,而后端在接受到分页请求后会对分页参数进行处理并计算出需要查询的是从第几条数据到第几条数据,然后利用MySQL的limit关键字去查询对应的记录并返回给前端。 2.1 新建实体类和Mapper接口

pikcacho_pkq的博客 8258

【GB28181】wvp-GB28181-pro部署安装教程(Ubuntu平台)

初始环境安装。

废人一枚的博客 5080

springboot 分页查询参数_如何使用 Spring Boot 实现分页和排序?

百度搜索圈T社区,免费视频教程。自学挺好的网站刚才我们已经成功引入了layui框架,现在我们来实现查询操作。首先我们先看一下项目的application.yml里面写的配置。注意一下数据库名称#配置数据源spring:datasource:username: root #用户名password: root #密码driver-class-name: com.mysql.jdbc.Driver #驱...

weixin_30725317的博客 1377

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

springBoot 使用 mybatis-plus 插件 实现分页

一、项目结构 二、pom.xml 依赖添加 (这里我是加在krystal_dao的pom.xml里面,单个项目,直接加在pom.xml,多模块根据自己项目情况添加) &lt;dependency&gt; &lt;groupId&gt;com.baomidou&lt;/groupId&gt; &lt;artifactId&gt;mybatis-plus&lt;/arti...

sinat_34338162的博客 5万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

springboot 分页查询参数_Spring Boot + PageHelper 实现分页,总结得很全了!

本文来自作者 "臣不贰" 投稿。一. 开发准备1. 开发工具IntelliJ IDEA 2020.2.32. 开发环境Red Hat Open JDK 8u256Apache Maven 3.6.33. 开发依赖SpringBootorg.springframework.bootspring-boot-starter-webMyBatisorg.mybatis.spring.bootmybatis...

weixin_39649965的博客 1252

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Spring boot (二)—— 分页功能的实现

Sping boot (二)—— 分页功能的实现 分页功能是一个spring boot项目常常用到的功能,所以这篇文章主要介绍一下两种简单的分页。 其实从网上我们可以看到比较常用的分页查询方法是用Pageable插件,但是我并不会用这个东西(手动捂脸),其实也是自己没去学的原因。所以这里介绍两种超级简单的分页查询,一种是通过Page类实现,另一种是通过对结果集的手动分页实现。 ...

ZJX_103的博客 6939

springboot+bootstrap实现分页

  首先我们先说一下分页。分页有物理分页和逻辑分页之分。物理分页是使用数据库本身提供的分页操作来完成数据查询,查询到的就是当前页的信息。例如

程序猿小龙的博客 2834

springboot 分页查询参数_Spring Boot:实现MyBatis分页

综合概述想必大家都有过这样的体验,在使用Mybatis时,最头痛的就是写分页了,需要先写一个查询count的select语句,然后再写一个真正分页查询的语句,当查询条件多了之后,会发现真的不想花双倍的时间写 count 和 select,幸好我们有pagehelper 分页插件,pagehelper 是一个强大实用的 MyBatis 分页插件,可以帮助我们快速的实现MyBatis分页功能,而且p...

weixin_39531761的博客 450

springboot如何实现分页

在Spring Boot中,可以使用Spring Data JPA以及相关的分页支持来实现分页功能。添加依赖:在Maven或Gradle配置文件中添加相关的依赖,包括Spring Data JPA和数据库驱动等。在控制器中调用业务逻辑代码:将UserService注入到控制器中,并调用相应的方法来获取分页数据。编写业务逻辑代码:在服务层或控制器中使用Repository接口来处理数据操作。创建实体类:创建与数据库表对应的实体类,并使用注解(如。的URL时,将会返回对应页码和每页大小的分页结果。

shuiwuyueying的博客 1046
上一篇: 利用EditPlus可视化编辑Linux系统上的文件
下一篇: 附件:Thymeleaf中与web上下文有关的对象用法
She_lock
博客等级 码龄12年 157粉丝 134原创
评论 16
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值