SpringBoot - 快速搭建


前言

关于怎么搭建 SpringBoot 项目,我相信大部分开发者自己都能搭建好,至于我为什么还要写,主要是我自己觉得搭一个项目挺麻烦的,想搞一个基础的模子,以后学习其它的技术就可以直接引用这个模子,写下笔记便于日后回顾和修改,顺便发下博客。

注意:以下项目创建方式以及项目内容完全是根据个人喜好而搭建的,仅具借鉴意义~~


一、简单项目的创建

这里项目的创建,我使用的工具是 IDEA,还有一个很重要的事情就是管理项目,这里我建议项目最好有一个集中的地方管理,所以我创建了一个 my-project 的文件夹专门用于管理自己的项目。

在这里插入图片描述

打开 IDEA 工具,点击 File -> New -> Project... 创建一个项目

在这里插入图片描述

选择 Sring Initializr (如果你用的是 IDEA 社区版的可能没有这个选项),完善以下资料,然后点击 Next

在这里插入图片描述

选择 SpringBoot 版本,点击 Finish

在这里插入图片描述

在这里插入图片描述

然后一个最简单的 spring-boot 项目就建好了,如果你只是为了创建一个 spring-boot 项目的话,到这里就可以结束了,以下内容很多东西都是按照我个人意愿去编写的,并不具有通用性,但是仍可借鉴使用~~

在这里插入图片描述

简单完善一下目录结构

在这里插入图片描述

在这里插入图片描述

  • com.duojiala.mikeboot
    • common ------------------------------------公共定义类
    • config ----------------------------------------配置类
    • controller -----------------------------------控制层
    • dao -------------------------------------------dao层
    • domain
      • annotations --------------------------注解类
      • bean -----------------------------------自定义类
      • dto --------------------------------------组装对象类
      • entity ----------------------------------实体类
      • enums ---------------------------------枚举类
      • req --------------------------------------请求体
      • resp ------------------------------------响应体
    • exceptions ------------------------------自定义异常类
    • service ------------------------------------服务层
      • imp -------------------------------------实现类
    • utils -------------------------------------------工具类

PS:以上并非标准,项目结构你可以根据自己的需求或者喜好去设计

二、常用依赖的引入

之前在创建项目的时候其实是可以选择添加依赖的,但是我没有去做,所以如果你按照我上述步骤创建项目的话,pom.xml 文件中只有两个依赖,如下:

在这里插入图片描述

接下来就是引入一些常用的依赖,供大家参考:

SpringBoot 项目的启动依赖:如果没有添加该依赖,启动类一运行会直接停止

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <scope>compile</scope>
        </dependency>

lombok 依赖插件:方便实体类 bean 快速生成 get set方法,从而不用手动添加

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

commons-lang3是Apache的Jakarta commons工程下具有一系列公共基础类,Lang组件主要是一些工具类,涉及到数组工具类,字符串工具类,字符工具类,数学方面,时间日期工具类,异常,事件等工具类。

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.10</version>
        </dependency>

通用Mapper依赖:是对底层 sql 进行了抽象封装,不需要考虑 sql 怎么写,只需要按照逻辑思维,遵循 tkmybatis 的语法即可实现数据库操作。

        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.1.5</version>
        </dependency>

JDBC驱动包:用 JDBC 连接 MySQL 数据库时必须使用该 jar 包,能够与数据库建立连接、发送 SQL 语句以及处理结果。

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

校验参数:就是一个规范,所有实现类必须是线程安全的,提供一些注解,但并不提供实现,可以根据需求去写一些有校验功能的注解。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

Fastjson:是一个 Java 语言编写的高性能功能完善的 JSON 库。它采用一种 “假定有序快速匹配” 的算法,把 JSON Parse 的性能提升到极致,是目前 Java 语言中最快的 JSON 库。Fastjson 接口简单易用,已经呗广泛使用在序列化、协议交互、Web 输出、Android 客户端等多种应用场景。

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.51</version>
        </dependency>

Spring web依赖

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>

mybatis 自动配置依赖

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-autoconfigure</artifactId>
            <version>2.1.1</version>
        </dependency>

表格依赖

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.7</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>

添加 mybatis 逆向工程插件,generator 的配置文件这里我放在 /resources/generator 目录下

            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.6</version>
                <configuration>
                    <configurationFile>
                        ${basedir}/src/main/resources/generator/generatorConfig.xml
                    </configurationFile>
                    <overwrite>true</overwrite>
                    <verbose>true</verbose>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.13</version>
                    </dependency>
                    <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper</artifactId>
                        <version>4.1.5</version>
                    </dependency>
                </dependencies>
            </plugin>

最后我 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/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.duojiala</groupId>
    <artifactId>mike-boot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mike-boot</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.10</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.1.5</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.51</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-autoconfigure</artifactId>
            <version>2.1.1</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.7</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.6</version>
                <configuration>
                    <configurationFile>
                        ${basedir}/src/main/resources/generator/generatorConfig.xml
                    </configurationFile>
                    <overwrite>true</overwrite>
                    <verbose>true</verbose>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.13</version>
                    </dependency>
                    <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper</artifactId>
                        <version>4.1.5</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

</project>

三、常用配置的编写

这里自动创建的项目,配置文件默认是 properties 的文件,这里我改用成 yml 格式的(仅仅是个人习惯的问题)

在这里插入图片描述

application.yml 常用配置的编写:

server:
  port: 8868
  servlet:
    context-path: /mike

spring:
  application:
    name: mike-boot
  # 数据库配置
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mike?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
    hikari:
      username: 'root'
      password: 'root'
      driver-class-name: 'com.mysql.cj.jdbc.Driver'

mybatis:
  configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

四、逆向工程的使用

之前在常用依赖引入中有引入 mybatis 逆向工程的插件,这里主要就是去编写逆向工程的一些配置文件,以及使用

首先需要在 resources 目录下创建文件夹 com/duojiala/mikeboot/dao 目录(要和你 dao 目录相一致),如果你用 IDEA 创建的话,切记不可直接 com.duojiala.mikeboot.dao 这样创建,因为这样创建的文件夹只是一个名字叫做 com.duojiala.mikeboot.dao 的文件夹,并非多层目录,比如:

在这里插入图片描述

用 IDEA 要一个一个创建

在这里插入图片描述

在创建一个 generator 的文件夹,该文件夹下面加上两个配置文件 config.propertiesgeneratorConfig.xml,做完以上步骤之后大概是这样的

在这里插入图片描述

config.properties 中配置编写:

jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mike?useSSL=false&characterEncoding=UTF-8&nullCatalogMeansCurrent=true&serverTimezone=GMT%2B8

jdbc.user=root
jdbc.password=root

javaModelTargetProject=src/main/java
javaModelTargetPackage=com.duojiala.mikeboot.domain.entity
mapperXMLTargetProject=src/main/resources
mapperXMLTargetPackage=com.duojiala.mikeboot.dao
mapperTargetProject=src/main/java
mapperTargetPackage=com.duojiala.mikeboot.dao

这里你要换成你自己的数据库,以及对应的映射关系要以你自己的项目去修改。

generatorConfig.xml 中配置编写:

<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <properties resource="generator/config.properties"/>

    <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
            <property name="caseSensitive" value="true"/>
        </plugin>

        <jdbcConnection driverClass="${jdbc.driverClass}"
                        connectionURL="${jdbc.url}"
                        userId="${jdbc.user}"
                        password="${jdbc.password}">
        </jdbcConnection>

        <!--实体类-->
        <javaModelGenerator targetPackage="${javaModelTargetPackage}"
                            targetProject="${javaModelTargetProject}"/>
        <!--mapper.xml-->
        <sqlMapGenerator targetPackage="${mapperXMLTargetPackage}"
                         targetProject="${mapperXMLTargetProject}"/>
        <!--mapper接口-->
        <javaClientGenerator targetPackage="${mapperTargetPackage}"
                             targetProject="${mapperTargetProject}"
                             type="XMLMAPPER"/>

        <table tableName="%">
            <generatedKey column="id" sqlStatement="JDBC"/>
        </table>
    </context>
</generatorConfiguration>

现在我连接的是我本地数据,该库里面只有一张 user 表

在这里插入图片描述

现在通过 mybatis 逆向工程生成 user 表对应的 实体类 和 mapper 文件,按如下步骤

在这里插入图片描述

执行完可以看见项目中已经生成了所配置数据库中所有表的映射实体类和 Mapper 文件

在这里插入图片描述

如果你想要针对某一张表生成对应的映射实体类和 Mapper 文件,可将 generatorConfig.xml 文件中 <table tableName="%"> 标签中的 % 改成表明,例如:只生成 user 表的

        <table tableName="user">
            <generatedKey column="id" sqlStatement="JDBC"/>
        </table>

同时,还需要在启动类上加上 @MapperScan 的注解扫描 mapper:@MapperScan(basePackages = {"com.duojiala.mikeboot.dao"})
在这里插入图片描述

五、常用类的编写

1. 自定义常量类

位于 common 目录下,创建示例类 DefineConstants.java

/**
 * 自定义常量类
 */
public class DefineConstants {

    /**
     * 默认数量
     */
    public static final String DEF_NUMBER = "0";

    /**
     * 默认金额
     */
    public static final String DEF_MONEY = "0.00";
}

2. 自定义注解类

位于 annotations 目录下,创建示例类 Describe.java

/**
 * 自定义描述注解
 */
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
//@Constraint(validatedBy = EnumParamCheck.DecimalParamCheckValidator.class)
public @interface Describe {
    String desc();
}

3. 自定义枚举类

位于 enums 目录下,创建性别枚举类 GenderEnum.java

/**
 * 性别枚举
 */
@Getter
@AllArgsConstructor
public enum GenderEnum {
    WOMAN(0,"女"),
    MAN(1,"男")
    ;
    private final int type;
    private final String desc;

    public static GenderEnum getGenderEnum(int type) {
        return Stream.of(values()).filter(value -> value.getType()==type).findFirst().orElse(null);
    }

    public static String getDescByType(int type) {
        GenderEnum genderEnum = getGenderEnum(type);
        if (genderEnum==null) return null;
        return genderEnum.getDesc();
    }
}

位于 enums 目录下,再创建一个自定义异常枚举 ExceptionEnum.java

/**
 * 自定义异常枚举
 */
@AllArgsConstructor
@Getter
@ToString
public enum ExceptionEnum {

    BAD_REQUEST(301, "错误的请求"),
    NOT_FIND(302,"未找到对应数据")
    ;
    private final int code;
    private final String msg;
}

4. 自定义异常类

位于 exceptions 目录下,创建自定义公共异常 CommonException.java

public class CommonException extends RuntimeException{

    private ExceptionEnum exceptionEnum;

    public CommonException(ExceptionEnum exceptionEnum) {
        super(exceptionEnum.getMsg());
        this.exceptionEnum = exceptionEnum;
    }

    public void setExceptionEnum(ExceptionEnum exceptionEnum) {
        this.exceptionEnum = exceptionEnum;
    }
    
    public ExceptionEnum getExceptionEnum() {
        return exceptionEnum;
    }

    @Override
    public String getMessage() {
        return this.exceptionEnum.getMsg();
    }
}

5. 通用响应对象

位于 dto 目录下,创建一个通用的响应对象 ResponseBean.java

/**
 * 通用响应对象
 */
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
@Slf4j
public class ResponseBean {

    private int code;
    private String msg;
    private Object data;

    public static int SUCCESS_CODE = 200;
    public static int ERROR_CODE = 300;

    public static String SUCCESS_MSG = "Success";
    public static String ERROR_MSG = "Error";

    public static ResponseBean success() {
        return ResponseBean.builder()
                .code(SUCCESS_CODE)
                .msg(SUCCESS_MSG)
                .build();
    }

    public static ResponseBean success(Object data) {
        return ResponseBean.builder()
                .code(SUCCESS_CODE)
                .msg(SUCCESS_MSG)
                .data(data)
                .build();
    }

    public static ResponseBean error() {
        return ResponseBean.builder()
                .code(ERROR_CODE)
                .msg(ERROR_MSG)
                .build();
    }

    public static ResponseBean error(int code, String msg) {
        return ResponseBean.builder()
                .code(code)
                .msg(msg)
                .build();
    }
}

6. 简单接口编写

请求体类,放在 req 目录下,创建 IdReq.java

@Data
@NoArgsConstructor
@AllArgsConstructor
public class IdReq {
    private String id;
}

响应体类,放在 resp 目录下,创建 UserInfoResp.java

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UserInfoResp {
    private String id;//用户id
    private String name;//用户名称
    private String birthday;//用户生日
    private String gender;//用户性别
}

Controller 类,位于 controller 目录下,创建 UserController.java

@Slf4j
@RestController
@RequestMapping(value = "/user")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@CrossOrigin(origins = "*", methods = {RequestMethod.POST, RequestMethod.GET})
public class UserController {

    private final UserService userService;

    @PostMapping(value = "/query-user-info")
    public ResponseBean queryUserInfo(@RequestBody @Validated IdReq req) {
        return ResponseBean.success(userService.queryUserInfo(req));
    }
}

Service 类,位于 service 目录下,创建 UserService.java

public interface UserService {

    UserInfoResp queryUserInfo(IdReq req);
}

Service 实现类,位于 impl 目录下,创建 UserServiceImpl.java

@Slf4j
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class UserServiceImpl implements UserService {

    private final UserMapper userMapper;

    @Override
    public UserInfoResp queryUserInfo(IdReq req) {
        User user = userMapper.selectByPrimaryKey(req.getId());
        if (user == null) {
            throw new CommonException(ExceptionEnum.NOT_FIND);
        }
        return UserInfoResp.builder()
                .id(user.getId().toString())
                .name(user.getName())
                .birthday(user.getBirthday())
                .gender(GenderEnum.getDescByType(user.getGender()))
                .build();
    }
}

一个根据 id 查询用户的简单方法就写完了,postman 测试正常

在这里插入图片描述

7. 常用的工具类

位于 utils 目录下,这里我复制了些我常用的工具类

  • CommonUtil ---------------------------------------- 通用工具类
  • DateUtil ---------------------------------------------- 时间工具类
  • EnumUtil -------------------------------------------- 枚举工具类
  • PageHelperUtil ------------------------------------ 分页工具类
  • PureNetUtil ----------------------------------------- 网络访问工具类
  • StringTool ------------------------------------------- 字符串工具类

在这里插入图片描述

六、网盘下载

以下是我搭建这个基础 SpringBoot 项目的网盘下载链接:

链接:百度网盘
提取码:w7yo

### 回答1: idea-springboot-projectes是指使用IDEA开发工具构建Spring Boot项目的过程。Spring Boot是一个流行的开源框架,可以帮助Java开发者快速构建高效的微服务应用。IDEA则是一个以Java为基础的集成开发环境,可以提供代码编辑、调试、测试和部署等功能。 在构建Spring Boot项目时,IDEA可以通过自带的Spring Initializr工具或者通过手动配置的方式来进行。Spring Initializr可以自动生成项目基础框架,包括依赖库、项目结构、POM文件等。而手动配置则需要开发者自行添加所需要的依赖库和配置文件。 在项目开发过程中,IDEA可以提供强大的代码提示和自动补全功能,包括快捷键、代码重构、调试等。此外,IDEA还支持各种测试框架和部署方式,方便开发者快速进行测试和部署。 总的来说,使用IDEA开发Spring Boot项目可以提高开发效率和代码质量,并且可以使用各种插件和扩展来增强开发体验。这是一个非常流行的Java开发模式,适用于各种类型的应用程序和系统。 ### 回答2: Idea-SpringBoot-Project是一个使用了Spring Boot框架的项目,有助于Java开发者轻松构建Web应用程序。Spring Boot是一个流行的Java框架,它可以帮助开发者更快地构建更好的应用程序。使用Idea-SpringBoot-Project,开发者可以轻松创建具有高可用性和可扩展性的Java Web应用程序。 Idea-SpringBoot-Project引入了许多方便的功能,如Spring容器管理、数据访问和Web MVC框架等。通过使用Spring Boot,开发者可以在不需要手动配置的情况下快速构建应用程序。而使用Idea作为开发工具,则能帮助开发者更快地编写代码和进行调试。这个项目不仅可以在Windows和Linux平台上运行,还与许多其他大型Java库和框架兼容,如Spring Security和Hibernate等。 总之,Idea-SpringBoot-Project帮助开发者将更多的时间专注于应用程序逻辑和功能,而不是花费时间和精力去手动配置。通过这个项目,开发者可以构建出高性能、高度可用性和可扩展性的Java应用程序。 ### 回答3: idea-springboot-projectes是针对Spring Boot框架的项目管理功能的开发工具集成环境。它提供了一种方便快捷的方式来创建、维护和调试Spring Boot项目。 idea-springboot-projectes使开发人员能够在一个单一的界面中,管理不同的Spring Boot项目,包括应用程序、库和插件。它自动生成项目结构,提供依赖管理,支持代码重构、调试和测试等功能,同时也能够整合其他常用开发工具如Maven、Gradle等,进一步提升开发效率。 通过idea-springboot-projectes,开发人员可以快速创建Spring Boot应用程序。一旦项目创建完成,可以通过IDEA的自动配置机制,无需编写大量的代码即可完成基础设施的搭建和配置。同时,IDEA也提供了许多Spring Boot Starter库,这些库包含了大量常用的功能和组件,帮助开发人员轻松实现各种业务需求。 总之,idea-springboot-projectes是一款非常实用的开发工具,为Spring Boot开发提供了强大的项目管理和开发支持,同时提高了开发效率和代码质量,使得开发人员能够更专注于业务代码的编写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值