IT菜鸟学MyBatis框架应用

web实验:MyBatis框架应用

前言:
记录自己的web作业,第一个web项目,从忘记数据库密码等等折腾了两天,还遇到超级超级多的bug怪!ε=(´ο`*)))害
下面虽然没有划出每个函数,不过代码里注释都比较清楚。这里指条明路,看懂一个测试函数的步骤:类——接口——映射(xml)——测试类


目录

  • 一、实验环境
  • 二、实验内容
  • 三、实验过程
  • (1)搭建数据库、建表、外键主键
  • (2)新建一个IDEA maven项目
  • (3)按顺序打包、连接数据库,创建类、接口、配置文件、测试文件
    1 开始打包
    2 编写连接数据库配置文件
    3 配置日志文件
    4 创建五个类和三个接口
    5 创建三个配置文件
    6 编写测试类
  • 四、程序运行

1.实验环境
Tomcat9.0+IDEA+Mybatis+mysql+Navicat for Mysql+JDK1.8
注:
(1)此实验程序的包名:com.dgut.huangxiaoqing
(2)数据库:localhost/web

2.实验内容
掌握mybatis持久层框架,对数据库进行增删查改的操作,包括以下操作:
(1)设计数据库

(1)添加学生
(2)修改学生信息
(3)根据SID查询学生信息
(4)根据姓名、学号、性别组合查询,其中姓名支持模糊查询

(1)添加课程
(2)修改课程信息
(3)根据课程名、课程编号组合查询,其中课程名支持模糊查询,课程编号支持列表查询

(1)添加选课记录
(2)根据id删除选课记录
(3)根据选课id查询选课记录对应的课程信息及学生信息
(4)根据课程ID(即CID)统计选课的学生人数

三、实验过程
(1)搭建数据库、建表、外键主键
当然啦比较懒就手动创建了数据库,贴一位网友的Navicat for Mysql手动设置外键:点我
在这里插入图片描述
(2)新建一个IDEA maven项目
应该会吧?不会点我
在这里插入图片描述
(3)按顺序打包、连接数据库,创建:类、接口、配置文件、测试文件

<1>开始打包

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
<groupId>com.dgut</groupId>
    <artifactId>Mybatis01</artifactId>
    <!-- 注意这里容易打包错误,不是pom,应该是jar -->
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.3</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.17</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>`

<2>连接数据库SqlMap-Config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 配置环境 -->
    <environments default="development">
        <!-- 配置mysql环境 -->
        <environment id="development">
            <!-- 配置事务 -->
            <transactionManager type="JDBC"/>
            <!-- 配置数据源连接池 -->
            <dataSource type="POOLED">
                <!-- 这⾥⽤得是mysql8的驱动包 -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url"
                          value="jdbc:mysql://localhost:3306/web?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="填数据库密码"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="istudentdao.xml"/>
        <mapper resource="icoursedao.xml"/>
        <mapper resource="ichoosedao.xml"/>
    </mappers>
</configuration>

<3>配置日志文件log4j.properties
为了看bug、查看系统反馈,网上很多的,可再找别人写好的,谁用谁知道。

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to
CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t]
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t]
%-5p %30.30c %x - %m\n 

<4>开始创建五个类和三个接口
因为类名一般都是大写字幕开头,接口名,一般是“I+类名+Dao“”命名,这里随意了。(写的时候内心:管他呢)

学生类Student & 接口istudentdao

package com.dgut.huangxiaoqing;
import java.util.List;
public class Student {
    private Integer SID;
    private String num;
    private String sname;
    private Integer age;
    private String sex;
    private List<Choose> choose;
    public List<Choose> getChoose(){
        return choose;
    }
    public void setChoose(List<Choose> choose) {
        this.choose = choose;
    }
//以下省略一万字get、set方法(留下了一对作记忆力不好时参考),下面四个类也省略略略略略略略略略略略略略略略略略略略略略略略略略略略略略略略略
    @Override
    public String toString() {
        return "Student{" +
                "SID=" + SID +
                ", num='" + num + '\'' +
                ", sname='" + sname + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

package com.dgut.dao;

import com.dgut.huangxiaoqing.QureyStudentVO;
import com.dgut.huangxiaoqing.Student;

import java.util.List;

public interface istudentdao {
    //    1.实现学生信息的添加、修改、查询;
    //    1.1保存学生信息
    public int save(Student s);

    //    1.2修改、更新学生信息
    public int update(Student s);

    //    1.3查询所有学生
    public List<Student> findAll();

    //    1.4根据学生SID查询学生信息
    public Student findStuByID(Integer SID);

    //    1.5根据姓名、学号、性别组合查询,其中姓名支持模糊查询
    public List<Student> findByCondition(QureyStudentVO q);
    //1.6根据学号查找该学生的选课信息
    public List<Student> findChooseBySID(Integer SID);
}

选课类Choose & 接口ichoosedao

package com.dgut.huangxiaoqing;


import java.util.List;

public class Course {
    private Integer CID;
    private String cname;
    private String materials;
    private Integer hour;
    private List<Student> student;
//省略get、set方法
    @Override
    public String toString() {
        return "Course{" +
                "CID=" + CID +
                ", cname='" + cname + '\'' +
                ", materials=" + materials + '\'' +
                ",hour=" + hour +
                '}';
    }
}


package com.dgut.dao;
import com.dgut.huangxiaoqing.Choose;
import java.util.List;

public interface ichoosedao {
    //    3.实现选课信息的添加、删除、查询
    //3.1添加选课记录
    public int save(Choose r);
    //3.2根据id删除选课记录
    public int delete(Integer r);
    //3.3根据选课记录id查询对应的课程信息及学生信息
    public List<Choose > findById(Integer id);
    //3.4根据课程ID(即CID)统计选课的学生人数
    public Integer studentCounts(Integer ID);
}

课程类Course & 接口icoursedao

package com.dgut.huangxiaoqing;

import java.sql.Date;
import java.util.List;

public class Choose {
    private Integer id;
    private Integer SID;
    private Integer CID;
    private Date time;
    private List<Student> student;
    private List<Course> course;
//省略get、set方法
    @Override
    public String toString() {
        return "Choose{" +
                "id=" + id +
                ",CID=" + CID +
                ",SID=" + SID +
                ", date='" + time + '\'' +
                '}';
    }
}

package com.dgut.dao;

import com.dgut.huangxiaoqing.Course;
import com.dgut.huangxiaoqing.QureyCourseVO;

import java.util.List;

public interface icoursedao {
    // 2.实现课程信息的添加、修改、查询
    //2.1添加课程
    public int save(Course c);
    //2.2修改课程信息
    public int update(Course s);
    //2.3 根据课程名、课程编号组合查询,其中课程名支持模糊查询,课程编号支持列表查询
    public List<Course> findByCondition(QureyCourseVO q);
}

QureyStudentVO类 & QureyCourseVO类

package com.dgut.huangxiaoqing;

import java.util.List;

public class QureyStudentVO {
    private String sname;
    private String sex;
    List<Integer> nums;
//省略get、set方法
    }
}
package com.dgut.huangxiaoqing;

import java.util.List;

public class QureyCourseVO {
    private String cname;
    List<Integer> CIDs;
//省略get、set方法
    }
}

<5>创建下面三个配置文件
(这一步是sql语句所在地)
istudentdao.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dgut.dao.istudentdao">
<resultMap id="studentChooseMap" type="com.dgut.huangxiaoqing.Student">
    <id column="SID" property="SID"/>
    <result property="num" column="num"/>
    <result property="sname" column="sname"/>
    <result property="sex" column="sex"/>
    <result property="age" column="age"/>
</resultMap>

<!--    1.1查询整个学生表-->
    <select id="findAll" resultMap="studentChooseMap">
     select student.*,choose.id,choose.CID,choose.time
     from Student
     LEFT JOIN choose ON student.SID=choose.SID
 </select>

<!--   1.2新增学生-->
    <insert id="save">
 insert into student(SID,num) values (#{SID},#{num})
 </insert>
    <!--    1.3更新学生信息-->
    <update id="update">
    update student set sname=#{sname},num=#{num}
    where SID=#{SID}
    </update>

<!--    1.4根据学生SID查询学生,注意不是根据学号num-->
    <select id="findStuByID" resultType="com.dgut.huangxiaoqing.Student">
     select * from student where SID=#{SID}
 </select>

<!--    1.5根据姓名、学号、性别组合查询,其中姓名支持模糊查询-->
    <select id="findByCondition" resultType="com.dgut.huangxiaoqing.Student"
            parameterType= "com.dgut.huangxiaoqing.QureyStudentVO">
    select * from student
     <where>
         <if test="sname != null">
             and sname like #{sname}
         </if>
         <if test="sex != null">
             and sex = #{sex}
         </if>
         <if test="nums != null and nums.size() > 0">
             <foreach collection="nums" open="and num in (" close=")"
             item="abc" separator=",">
                #{abc}
             </foreach>
         </if>
     </where>
    </select>

<!--    根据SID查询该学生的选课信息-->
    <select id="findChooseBySID" resultMap="studentChooseMap">
        SELECT student.*,choose.id,choose.CID,choose.time
        From student
        LEFT JOIN choose on choose.SID = student.SID
        WHERE student.SID = #{SID}
    </select>
</mapper>

icoursedao.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dgut.dao.icoursedao">
<resultMap id="courseMap" type="com.dgut.huangxiaoqing.Course">
    <id property="CID" column="CID"/>
    <result property="cname" column="cname"/>
    <result property="materials" column="materials"/>
    <result property="hour" column="hour"/>
</resultMap>
    <!--   2.1添加课程-->
    <insert id="save">
 insert into course(CID,cname,materials) values (#{CID},#{cname},#{materials})
 </insert>
    <!--    2.2修改课程信息-->
    <update id="update">
    update course set cname=#{cname},materials=#{materials},hour=#{hour}
    where CID=#{CID}
    </update>

    <!--    2.3根据课程名、课程编号组合查询,其中课程名支持模糊查,课程编号支持列表查询-->
    <select id="findByCondition" resultType="com.dgut.huangxiaoqing.Course"
            parameterType="com.dgut.huangxiaoqing.QureyCourseVO">
        select * from course
     <where>
         <if test="cname != null">
            and cname like #{cname}
         </if>
         <if test="CIDs != null and CIDs.size()>0">
             <foreach collection="CIDs" open="and CID in (" close=")" item="abc" separator=",">
                 #{abc}
             </foreach>
         </if>
     </where>
 </select>

<!--    通过课程ID查找课程-->
    <select id="findCtuByID" resultType="com.dgut.huangxiaoqing.Course">
    select * from course where CID=#{CID}
</select>

</mapper>

ichoosedao.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dgut.dao.ichoosedao">
<resultMap id="chooseMap" type="com.dgut.huangxiaoqing.Choose">
    <id property="id" column="id"/>
    <result property="SID" column="SID"/>
    <result property="CID" column="CID"/>
    <result property="time" column="time"/>
    <collection property="student" ofType="com.dgut.huangxiaoqing.Student">
        <id property="SID" column="SID"/>
        <result property="num" column="num"/>
        <result property="sname" column="sname"/>
        <result property="sex" column="sex"/>
        <result property="age" column="age"/>
    </collection>
    <collection property="course" ofType="com.dgut.huangxiaoqing.Course">
        <id property="CID" column="CID" jdbcType="INTEGER"/>
        <result property="cname" column="cname" jdbcType="VARCHAR"/>
        <result property="materials" column="materials" jdbcType="VARCHAR"/>
        <result property="hour" column="hour" jdbcType="INTEGER"/>
    </collection>
</resultMap>

    <!--   3.1添加选课记录-->
    <insert id="save">
 insert into choose(id,SID,CID,time) values (#{id},#{SID},#{CID},#{PRIMARY})
 </insert>

    <!--    3.2根据id删除选课记录-->
    <delete id="delete" >
    delete from choose where id = #{uid}
    </delete>

    <!--    3.3根据选课id查询选课记录对应的课程信息及学生信息-->
    <select id="findById" resultMap="chooseMap">
        select *
        from choose a
        LEFT JOIN student st ON a.SID=st.SID
        RIGHT JOIN course ch ON a.CID=ch.CID
        WHERE  a.id=#{id}
    </select>

    <!--    3.4根据课程ID(即CID)统计选课的学生人数-->
    <select id="studentCounts" resultType="int">
        select count(*)
        from choose
        WHERE CID= #{CID}
    </select>

</mapper>

<6>开始写测试类
好激动!!!!终于要开始run了!!!!!!!!
好激动!!!!终于要开始run了!!!!!!!!
好激动!!!!终于要开始run了!!!!!!!
有请下面三位哥登场❀❀❀❀❀❀❀❀❀❀
在这里插入图片描述
StudentTest

package com.dgut;

import com.dgut.dao.istudentdao;
import com.dgut.huangxiaoqing.QureyStudentVO;
import com.dgut.huangxiaoqing.Student;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class StudentTest {
    InputStream inputStream;
    SqlSession session;
    istudentdao studentDao;
    @Before
    public void before() throws IOException {
        //1.读取配置⽂件
        inputStream =
                Resources.getResourceAsStream("SqlMap-Config.xml");
        //2.创建SqlSessionFactory的构建者对象,使⽤构建者创建⼯⼚对象
        SqlSessionFactory sqlSessionFactory = new
                SqlSessionFactoryBuilder().build(inputStream);
        //3.使⽤SqlSessionFactory⽣产SqlSession对象
        session = sqlSessionFactory.openSession();
        //4.使⽤SqlSession创建dao接⼝的代理对象
        studentDao = session.getMapper(com.dgut.dao.istudentdao.class);
    }
    @After
    public void after() throws IOException {
        //6.释放资源
        session.close();
        inputStream.close();
    }

    @Test
    public void testFindAll() throws IOException {
        //1.1查询所有学生
        List<Student> studnets = studentDao.findAll();
        for(Student student : studnets){
            System.out.println(student);
            System.out.println(student.getChoose()+"\n");
        }
//        List<Student> students = studentDao.findAll();
//        for (Student student : students){
//            System.out.println(students);
//        }
    }
    @Test
    public void testsave() throws IOException {
        //1.2新增学生
        Student student = new Student();
        student.setId(4);
        student.setNum("202056");
        studentDao.save(student);
        session.commit();
    }
    @Test
    public void testupdate() throws IOException {
        //1.3更新学生
        Student student =studentDao.findStuByID(19);
        student.setSname("小抗体");
        student.setNum("202020");
        student.setAge(1);
        student.setSex("未知");
        int res = studentDao.update(student);
        session.commit();
        System.out.println(res);
    }
    @Test
    public void testfindStuByID() throws IOException {
        //1.4通过SID查询学生
        Student student= studentDao.findStuByID(2);
        System.out.println(student);
    }
@Test
//1.5根据姓名、学号、性别组合查询,其中姓名支持模糊查询
    public void testFindBySQV() throws IOException{
    QureyStudentVO u = new QureyStudentVO();
    u.setSname("%抗%");
    List list = new ArrayList();
    list.add(202020);
    list.add(202056);
    u.setIds(list);

    List<Student> students = studentDao.findByCondition(u);
    for(Student student : students){
        System.out.println(student);
    }
}

@Test
//1.6根据学号查找该学生的选课信息
    public  void testfindChooseBySID(){
        List<Student> students = studentDao.findChooseBySID(1);
        for(Student student : students){
            System.out.println(student);
            System.out.println(student.getChoose());
        }
}

}

CourseTest

package com.dgut;

import com.dgut.dao.icoursedao;
import com.dgut.huangxiaoqing.Course;
import com.dgut.huangxiaoqing.QureyCourseVO;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class CourseTest {
    InputStream inputStream;
    SqlSession session;
    icoursedao courseDao;
    @Before
    public void before() throws IOException {
        //1.读取配置⽂件
        inputStream =
                Resources.getResourceAsStream("SqlMap-Config.xml");
        //2.创建SqlSessionFactory的构建者对象,使⽤构建者创建⼯⼚对象
        SqlSessionFactory sqlSessionFactory = new
                SqlSessionFactoryBuilder().build(inputStream);
        //3.使⽤SqlSessionFactory⽣产SqlSession对象
        session = sqlSessionFactory.openSession();
        //4.使⽤SqlSession创建dao接⼝的代理对象
        courseDao = session.getMapper(com.dgut.dao.icoursedao.class);
    }
    @After
    public void after() throws IOException {
        //6.释放资源
        session.close();
        inputStream.close();
    }
    @Test
    public void testsave() throws IOException {
        //2.1新增课程
        Course course = new Course();
        course.setCID(202003);
        course.setCname("组网技术");
        course.setMaterials("华为内部教材");
        courseDao.save(course);
        session.commit();
    }
@Test
    public void testupdate(){
        //2.2修改课程信息,先通过课程ID查找课程
    Course course = courseDao.findCtuByID(202003);
    course.setHour(42);
    int res = courseDao.update(course);
    session.commit();
    System.out.println(res);
}

@Test
    public void testfindByCondition() {
//        2.3根据课程名、课程编号组合查询,其中课程名支持模糊查,课程编号支持列表查询
    QureyCourseVO u = new QureyCourseVO();
    u.setCname("组%");
    List list = new ArrayList();
    list.add(202001);
    list.add(202002);
    list.add(202003);
    u.setCID(list);

    List<Course> coursess = courseDao.findByCondition(u);
    for (Course course : coursess){
        System.out.println(course);
    }
}

}

ChooseTest

package com.dgut;

import com.dgut.dao.ichoosedao;
import com.dgut.huangxiaoqing.Choose;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class ChooseTest {
    InputStream inputStream;
    SqlSession session;
    ichoosedao chooseDao;
    @Before
    public void before() throws IOException {
        //1.读取配置⽂件
        inputStream =
                Resources.getResourceAsStream("SqlMap-Config.xml");
        //2.创建SqlSessionFactory的构建者对象,使⽤构建者创建⼯⼚对象
        SqlSessionFactory sqlSessionFactory = new
                SqlSessionFactoryBuilder().build(inputStream);
        //3.使⽤SqlSessionFactory⽣产SqlSession对象
        session = sqlSessionFactory.openSession();
        //4.使⽤SqlSession创建dao接⼝的代理对象
        chooseDao = session.getMapper(com.dgut.dao.ichoosedao.class);
    }
    @After
    public void after() throws IOException {
        //6.释放资源
        session.close();
        inputStream.close();
    }
    @Test
    public void testsave(){
//        3.1增加选课记录
        Choose choose = new Choose();
        choose.setID(2);
        choose.setSID(1);
        choose.setCID(202001);
        chooseDao.save(choose);
        session.commit();;
    }

    @Test
    public void testdelete() throws IOException{
//    3.2根据id删除选课记录
        int res = chooseDao.delete(2);
        System.out.println(res);
        session.commit();
}

    @Test
    public void testfindById(){
//     3.3根据选课id查询选课记录对应的课程信息及学生信息
        List<Choose> list = chooseDao.findById(1);
        for(Choose choose : list) {
            System.out.println(list);
            System.out.println(choose.getStudent()+"\n");
            System.out.println(choose.getCourse()+"\n");
        }
    }
    @Test
//    3.4根据课程ID(即CID)统计选课的学生人数
    public void teststudentCounts(){
        Integer count=
            chooseDao.studentCounts(202001);
        System.out.println("\n"+"选该课的人数:"+count+"\n");
    }
}


(4)程序运行
按下左边绿绿的小按钮,策马奔腾!!
在这里插入图片描述

完结撒花!!!✿✿ヽ(°▽°)ノ✿

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值