Springboot整合

  • 新建一个Spring Initializr项目

  • 创建项目的文件结构以及jdk的版本 

  • 选择项目所需要的依赖

 

  •  POM文件修改

<?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.6.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>aoyi</groupId>
    <artifactId>sn</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>sn</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-test</artifactId>
            <scope>test</scope>
        </dependency>


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

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

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

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.0</version>
        </dependency>

        <!--缺少此jar包,导致@Mapper注解无效-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>mybatis</artifactId>
                    <groupId>org.mybatis</groupId>
                </exclusion>
            </exclusions>
        </dependency>

         <!--分页插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.5</version>
            <exclusions>
                <exclusion>
                    <artifactId>mybatis-spring-boot-starter</artifactId>
                    <groupId>org.mybatis.spring.boot</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <!--swagger-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.7.0</version>
        </dependency>
        <!--swagger ui-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.7.0</version>
        </dependency>

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

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

        <!--rabbitmq 依赖客户端--> <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
        <version>5.8.0</version>
    </dependency>
        <!--操作文件流的一个依赖--> <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
    </dependency>


    </dependencies>

    <build>
        <!--读取数据库配置-->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                    <include>**/*.yml</include>
                </includes>
                <filtering>true</filtering>
            </resource>

        </resources>
        <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.0</version>
            <!-- 插件的依赖 -->
            <dependencies>
                <!-- 逆向工程的核心依赖 -->
                <dependency>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-core</artifactId>
                    <version>1.3.2</version> </dependency>
                <!-- 数据库连接池 -->
                <dependency>
                    <groupId>com.mchange</groupId>
                    <artifactId>c3p0</artifactId>
                    <version>0.9.2</version>
                </dependency>
                <!-- MySQL驱动 -->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.8</version> </dependency>
            </dependencies>
        </plugin>



        </plugins>

    </build>

</project>
  • 修改配置文件

将resource文件夹下原有的application.properties文件删除,创建application.yml配置文件(备注:其实SpringBoot底层会把application.yml文件解析为application.properties),本文创建了两个yml文件(application.yml和application-dev.yml)

application.yml

spring:
  profiles:
    active: dev

application-dev.yml

server:
  port: 8080
 
spring:
  datasource:
    username: root
    password: 1234
    url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
    driver-class-name: com.mysql.jdbc.Driver
 
    #解决循环依赖的问题
  main:
    allow-circular-references: true
mybatis:
  mapper-locations: classpath:mapping/*.xml
  type-aliases-package: org.aoyi.sn.entity
pagehelper:
    helperDialect: mysql
    reasonable: true
    page-size-zero: true
    supportMethodsArguments: true
    params: count=countSql
#showSql
logging:
  level:
    com.example.demo.mapper: debug

在项目中配置多套环境的配置方法。
 

笔记:在Spring Boot中多环境配置文件名需要满足application-{profile}.yml的格式,其中{profile}对应你的环境标识,比如:

application-dev.yml:开发环境
application-test.yml:测试环境
application-prod.yml:生产环境

至于哪个具体的配置文件会被加载,需要在application.yml文件中通过spring.profiles.active属性来设置,其值对应{profile}值。

  • 配置 mybatis-generator-core

  • resource文件下创建generatorConfig.xml文件
  • 修改自己要生成的位置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- targetRuntime: 执行生成的逆向工程的版本 MyBatis3Simple: 生成基本的CRUD(清新简洁版)
    MyBatis3: 生成带条件的CRUD(奢华尊享版) -->
    <context id="DB2Tables" targetRuntime="MyBatis3Simple">
        <!-- 数据库的连接信息 -->
    <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://rm-bp1vc9osk3mo2o4h3lo.mysql.rds.aliyuncs.com:端口/数据库名称" userId=" " password=" "></jdbcConnection>
        <!-- javaBean的生成策略-->
        <javaModelGenerator targetPackage="org.aoyi.sn.entity" targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- SQL映射文件的生成策略 xml生成 -->
        <sqlMapGenerator targetPackage="mapping" targetProject=".\src\main\resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!-- Mapper接口的生成策略 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="org.aoyi.sn.mapper" targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
        <!-- 逆向分析的表 -->
        <!-- tableName设置为*号,可以对应所有表,此时不写domainObjectName -->
    <!-- domainObjectName属性指定生成出来的实体类的类名 -->
        <table tableName="aoyi_sn_order" domainObjectName="AoyiSnOrder" />


    </context>
</generatorConfiguration>
  • 右键Run maven build

  • 生成效果

  • 基本方法都已经生成好了

  • 启动类配置扫描mapper

  • resource文件下创建logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration  scan="true" scanPeriod="10 seconds">

    <contextName>logback</contextName>
    <property name="log.path" value="D:/project/helen/guli_log/edu" /> //输出路径

    <!--控制台日志格式:彩色日志-->
    <!-- magenta:洋红 -->
    <!-- boldMagenta:粗红-->
    <!-- cyan:青色 -->
    <!-- white:白色 -->
    <!-- magenta:洋红 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)"/>

    <!--文件日志格式-->
    <property name="FILE_LOG_PATTERN"
              value="%date{yyyy-MM-dd HH:mm:ss} |%-5level |%thread |%file:%line |%logger |%msg%n" />

    <!--编码-->
    <property name="ENCODING"
              value="UTF-8" />

    <!--输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!--日志级别-->
            <level>DEBUG</level>
        </filter>
        <encoder>
            <!--日志格式-->
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!--日志字符集-->
            <charset>${ENCODING}</charset>
        </encoder>
    </appender>

    <!--输出到文件-->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志过滤器:此日志文件只记录INFO级别的-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_info.log</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>${ENCODING}</charset>
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志归档路径以及格式 -->
            <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
    </appender>

    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志过滤器:此日志文件只记录WARN级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_warn.log</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>${ENCODING}</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
    </appender>

    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志过滤器:此日志文件只记录ERROR级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_error.log</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>${ENCODING}</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
    </appender>

    <!--开发环境-->
    <springProfile name="dev">
        <!--可以灵活设置此处,从而控制日志的输出-->
        <root level="DEBUG">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="WARN_FILE" />
            <appender-ref ref="ERROR_FILE" />
        </root>
    </springProfile>

    <!--生产环境-->
    <springProfile name="pro">
        <root level="ERROR">
            <appender-ref ref="ERROR_FILE" />
        </root>
    </springProfile>

</configuration>

创建util包 封装返回值

package aoyi.sn.util;


/**
 *  
 * @author LEOH
 *
 */
public class BaseResult<T> {
	private String retMsg;
	private String retCode;
	private T data;
	public T getData() {
		return data;
	}
	public void setData(T data) {
		this.data = data;
	}
	public String getRetMsg() {
		return retMsg;
	}
	public void setRetMsg(String retMsg) {
		this.retMsg = retMsg;
	}
	public String getRetCode() {
		return retCode;
	}
	public void setRetCode(String retCode) {
		this.retCode = retCode;
	}

	public BaseResult<T> buildOk(T t, String retMsg) {
		BaseResult<T> tBaseResult = new BaseResult<>();
		tBaseResult.data = t;
		tBaseResult.retCode = Constants.SuccessCode;
		tBaseResult.retMsg = retMsg;
		return tBaseResult;
	}

	public BaseResult<T> buildFail(String retMsg){
		BaseResult<T> tBaseResult = new BaseResult<>();
		tBaseResult.retCode = Constants.FailCode;
		tBaseResult.retMsg = retMsg;
		return tBaseResult;
	}

}
package aoyi.sn.util;

public class Constants {


	public static final String Query = "[查询]";
	public static final String Add = "[新增]";
	public static final String Update = "[更新]";
	public static final String Delete = "[删除]";
	public static final String Duplicate = "[重复]";
	public static String SplitChar = "_";
	/**
	 * 24*3600*10 10 days
	 */
	public static final long ExpireTime = 864000;

	public static final String FailCode = "FAIL";

	public static final String SuccessCode = "OKAY";

	public static final int PageSize = 10;

}

select标签常用属性

parameterType   传入参数  支持map javaBean等值  resultMap 返回参数


Mapper增加

public List<AoyiSnCategory> selectAll(Map<String, Object> paras);

xml增加

 <sql id="Base_Column_List">
   id, create_by, create_time,
      update_by, update_time, sn_category_id,
      sn_category_name, sn_category_level, sn_category_parent_id
  </sql>
 <select id="selectAll" resultMap="BaseResultMap" >
    select     <include refid="Base_Column_List" />
    from aoyi_sn_category
  </select>

创建service

@Service
public interface AoyiSnCategoryService {


    public BaseResult<PageInfo<AoyiSnCategory>> getSnCategorys(Map<String, Object> paras);
}

创建serviceimpl



import java.util.*;

@Service
@Transactional(rollbackFor = { RuntimeException.class, Exception.class })
public class AoyiSnCategoryServiceImpl implements AoyiSnCategoryService {
    private static final Logger logger = LoggerFactory.getLogger(AoyiSnCategoryService.class);
    @Autowired
    private AoyiSnCategoryMapper aoyiSnCategoryMapper;
   

    @Override
    public BaseResult<PageInfo<AoyiSnCategory>> getSnCategorys(Map<String, Object> paras) {
        logger.info("查询类型列表");
        BaseResult<PageInfo<AoyiSnCategory>> baseRet = new BaseResult<PageInfo<AoyiSnCategory>>();
        baseRet.setRetCode(Constants.FailCode);
        baseRet.setRetMsg(Constants.Query);
        int pageNo = Integer.parseInt(String.valueOf(paras.get("pageNo")));
        int pageSize = Integer.parseInt(String.valueOf(paras.get("pageSize")));
        PageHelper.startPage(pageNo, pageSize);
        List<AoyiSnCategory> list = aoyiSnCategoryMapper.selectAll(paras);
        PageInfo<AoyiSnCategory> pageDataList = new PageInfo<AoyiSnCategory>(list);
        baseRet.setData(pageDataList);
        baseRet.setRetCode(Constants.SuccessCode);
        return baseRet;
    }


}

controller

@RestController
@RequestMapping("/AoyiSnCategory")
public class AoyiSnCategoryController {

    @Autowired
    private AoyiSnCategoryService aoyiSnCategoryService;

    //查询
    @RequestMapping(value = "getAoyiSnCategorys", method = RequestMethod.POST)
    @ResponseBody
    public BaseResult<PageInfo<AoyiSnCategory>> getDeviceTypeByParas(@RequestBody Map<String, Object> paras){
        return aoyiSnCategoryService.getSnCategorys(paras);
    }


}

启动

测试查询    封装好了分页  查询2条 

配置了日志 打印sql 需下载mybatis Log 插件 

增加

 public Integer insertAoyiSnCategory(Map<String, Object>  paras);
@Override
public BaseResult<Integer> insertAoyiSnCategory(Map<String, Object> paras) {
    BaseResult<Integer> baseRet = new BaseResult<Integer>();
    baseRet.setRetCode(Constants.FailCode);
    baseRet.setRetMsg(Constants.Add);
    String createTime = DateUtil.formatYYYYMMDDHHMMSS(new Date());
    paras.put("createTime", createTime);
    paras.put("id", UUID.randomUUID().toString());
    Integer integerBaseResult = aoyiSnCategoryMapper.insertAoyiSnCategory(paras);
   baseRet.setData(integerBaseResult);
    baseRet.setRetCode(Constants.SuccessCode);
    return baseRet;
}
 <insert id="insertAoyiSnCategory"  parameterType="java.util.Map">

insert into aoyi_sn_category (id, create_by, create_time,
     update_by, update_time, sn_category_id,
     sn_category_name, sn_category_level, sn_category_parent_id
     )
   values (#{id,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP},
     #{updateBy,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}, #{snCategoryId,jdbcType=VARCHAR},
     #{snCategoryName,jdbcType=VARCHAR}, #{snCategoryLevel,jdbcType=VARCHAR}, #{snCategoryParentId,jdbcType=VARCHAR}
     )
   </insert>
 //增加
    @RequestMapping(value = "/insertAoyiSnCategorys", method = RequestMethod.POST)
    @ResponseBody
    public BaseResult<Integer> insertAoyiSnCategorys(@RequestBody Map<String, Object> paras){
        return aoyiSnCategoryService.insertAoyiSnCategory(paras);
    }

测试

修改

public int updateAoyiSnCategory(Map<String, Object> paras);

  <update id="updateAoyiSnCategory"  parameterType="java.util.Map">
  update aoyi_sn_category
    <set>
      <if test="snCategoryName != null and snCategoryName != ''">sn_category_name = #{snCategoryName}</if>
    </set>
    WHERE
    id = #{id}
  </update>
@Override
public BaseResult<Integer> updateAoyiSnCategory(Map<String, Object> paras) {
    BaseResult<Integer> baseRet = new BaseResult<Integer>();
    baseRet.setRetCode(Constants.FailCode);
    baseRet.setRetMsg(Constants.Update);
    int ret = aoyiSnCategoryMapper.updateAoyiSnCategory(paras);
    baseRet.setData(ret);
    baseRet.setRetCode(Constants.SuccessCode);
    return baseRet;
}
  @RequestMapping(value = "/updateAoyiSnCategory", method = RequestMethod.POST)
    @ResponseBody
    public BaseResult<Integer> updateAoyiSnCategory(@RequestBody Map<String, Object> paras){
        return aoyiSnCategoryService.updateAoyiSnCategory(paras);
    }

测试

删除

public BaseResult<Integer> deleteDeviceType(int id);

  @Override
    public BaseResult<Integer> delectAoyiSnCategory(String id) {
        BaseResult<Integer> baseRet = new BaseResult<Integer>();
        baseRet.setRetCode(Constants.FailCode);
        baseRet.setRetMsg(Constants.Delete);
        int ret = aoyiSnCategoryMapper.deleteByPrimaryKey(id);
        baseRet.setData(ret);
        baseRet.setRetCode(Constants.SuccessCode);
        return baseRet;
    }
  @RequestMapping(value = "/delectAoyiSnCategory", method = RequestMethod.POST)
    @ResponseBody
    public BaseResult<Integer> delectAoyiSnCategory(@RequestBody Map<String, Object> paras){
        return aoyiSnCategoryService.delectAoyiSnCategory((String) paras.get("id"));
    }

idea上传项目到gitee(码云)超详细 

(3条消息) idea上传项目到gitee(码云)超详细_『愚』的博客-CSDN博客_idea上传项目到gitee

剩下内容以后在加入

package org.aoyi.sn.mqtt;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class RabbitMqUtils {
//得到一个连接的 channel
public static Channel getChannel() throws Exception{
//创建一个连接工厂
 ConnectionFactory factory = new ConnectionFactory();
 factory.setHost("192.168.1.125");
 factory.setUsername("admin");
 factory.setPassword("123");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
return channel;
} }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咕噜咕噜wy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值