SSM整合CRUD(超详细)

目录

1.准备工作

1.1 导入依赖

1.2 添加数据库

1.3 web.xml文件

1.4 导入spring文件

 1.5 导入pojo实体类

1.5.1 Emp类

1.5.2 Dept类

2. 查询所有

2.1 前端jsp页面

2.2 controller层

2.3 service层和实现层

2.4 dao层和xml配置文件

2.4.1 EmpDao

2.4.2 EmpMapper.xml

2.5 index.jsp

3. 删除

3.1 前端jsp页面

3.2 controller层

3.3 service层和实现层

3.4 dao层和xml配置文件

4. 添加

4.1 前端jsp界面

4.2 Dept表

4.2.1 controller层

4.2.2 service层和实现层

4.2.3 dao层和xml

4.2.4 跳转到新建的addEmp.jsp界面

4.3 Emp表

4.3.1 controller层

4.3.2 service层和实现层

4.3.3 dao层和xml

5. 修改

5.1 前端jsp页面

5.2 第一层

5.2.1 controller层

5.2.2 service层和实现层

5.2.3 dao层和xml

5.3 第二层

5.3.1 前端jsp页面

5.3.2 controller层

5.3.3 service层和实现层

5.3.4 dao层和xml


1.准备工作

1.1 导入依赖

<?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>org.example</groupId>
    <artifactId>ssm_demo1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <!--spring webmvc依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.15.RELEASE</version>
        </dependency>
        <!--mybatis的依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>
        <!--mysql驱动依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <!--druid连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.8</version>
        </dependency>
        <!--spring和mybatis整合的依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.7</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.15.RELEASE</version>
        </dependency>
        <!--其他依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

    </dependencies>
</project>

1.2 添加数据库

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for tbl_dept
-- ----------------------------
DROP TABLE IF EXISTS `tbl_dept`;
CREATE TABLE `tbl_dept`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `loc` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of tbl_dept
-- ----------------------------
INSERT INTO `tbl_dept` VALUES (1, '研发部', '郑州');
INSERT INTO `tbl_dept` VALUES (2, '市场部', '北京');
INSERT INTO `tbl_dept` VALUES (3, '财务部', '上海');
INSERT INTO `tbl_dept` VALUES (4, '人事部', '杭州');

-- ----------------------------
-- Table structure for tbl_emp
-- ----------------------------
DROP TABLE IF EXISTS `tbl_emp`;
CREATE TABLE `tbl_emp`  (
  `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `salary` decimal(10, 2) NULL DEFAULT NULL COMMENT '薪水',
  `birthday` date NULL DEFAULT NULL COMMENT '出生日期',
  `dept_id` int(0) NULL DEFAULT NULL COMMENT '部门id 关联部门表',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of tbl_emp
-- ----------------------------
INSERT INTO `tbl_emp` VALUES (1, '刘德华', 2500.00, '2000-10-11', 1);
INSERT INTO `tbl_emp` VALUES (2, '张学友', 3200.00, '2001-11-15', 2);
INSERT INTO `tbl_emp` VALUES (3, '黎明', 2800.00, '2002-12-12', 4);
INSERT INTO `tbl_emp` VALUES (4, '郭富城', 5000.00, '2008-11-12', 3);
INSERT INTO `tbl_emp` VALUES (5, '闫克起', 50000.00, '2010-12-12', 1);

SET FOREIGN_KEY_CHECKS = 1;

1.3 web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--注册DispatchServlet-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--如果没有指定参数默认解析WEB-INF/servlerName-servlet.xml-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:springmvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <!--乱码处理过滤器,由SpringMVC提供-->
    <!-- 处理post请求乱码 -->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <!-- name固定不变,value值根据需要设置 -->
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <!-- 所有请求都设置utf-8的编码 -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

1.4 导入spring文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--1.包扫描-->
    <context:component-scan base-package="com.aaa.controller,com.aaa.service"/>
    <!--2.注解驱动-->
    <mvc:annotation-driven/>
    <!--3.静态资源放行-->
    <mvc:default-servlet-handler/>
    <!--4.视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--5.配置数据源-->
    <bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/db_ssm?useSSL=false&amp;useServerPrepStmts=true&amp;characterEncoding=utf-8"/>
        <property name="username" value="root"/>
        <property name="password" value="970812"/>
    </bean>
    <!--6. SqlSessionFactory:理解为mybatis文件-->
    <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="datasource"/>
        <!--指定mybatis映射文件的路径-->
        <property name="mapperLocations" value="classpath*:mapper/*.xml"/>
    </bean>
    <!--7.设置dao接口的代理实现类-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sessionFactory"/>
        <!--dao接口所在的包-->
        <property name="basePackage" value="com.aaa.dao"/>
    </bean>
</beans>

 1.5 导入pojo实体类

1.5.1 Emp类

@Data
public class Emp {
    private Integer id;
    private String name;
    //小数类型 不要使用double或float 因为它有精度丢失问题3.0  3.000000000001
    private BigDecimal salary;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    private Integer deptId;
    private Dept dept;//一对一操作
}

1.5.2 Dept类

@Data
public class Dept {
    private Integer id;
    private String name;
    private String loc;
}

2. 查询所有

员工及其对应部门信息(多表联查)

2.1 前端jsp页面

<%@ page contentType="text/html;charset=UTF-8"
         language="java" %>
<%@ taglib prefix="c"
           uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt"
           uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<input type="button" value="添加" onclick="location.href='/dept/list'">
<table width="600" border="1" cellpadding="0"
       cellspacing="0" align="center">
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>薪水</th>
        <th>日期</th>
        <th>部门</th>
        <th>操作</th>
    </tr>
    <%--jstl 核心标签库${} 必须引入jstl标签库的依赖
    forEach: 遍历集合或数组
    使用jstl标签库: 必须导入依赖
    2.2 链表查询部门信息
    items: 要遍历的集合或数组数据
    var: 每次遍历时集合中的元素赋值的变量名
    --%>
    <c:forEach items="${emps}" var="e">
        <tr>
            <td>${e.id}</td>
            <td>${e.name}</td>
            <td>${e.salary}</td>
            <td>
                <fmt:formatDate
                        value="${e.birthday}" pattern="yyyy-MM-dd"/>
            </td>
            <td>${e.dept.name}</td>
            <td>
                <input type="button" value="删除" onclick="location.href='/delete?id=${e.id}'"/>
                <input type="button" value="编辑" onclick="location.href='/update?id=${e.id}'"/>
            </td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

2.2 controller层

@Controller
public class EmpController {
    @Autowired //按照类型匹配
    private EmpService empService; //EmpService类对象必须再spring中创建好
    @Autowired
    private DeptService deptService;
    @RequestMapping("/list")
    public String list(HttpServletRequest request){
        List<Emp> emps = empService.selectAll();
        request.setAttribute("emps",emps);
        return "list";  //视图解析器:/views/list.jsp
    }
}

2.3 service层和实现层

public interface EmpService {
    public List<Emp> selectAll();
}
@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpDao empDao;
    public List<Emp> selectAll() {
        return empDao.findAll();
    }
}

2.4 dao层和xml配置文件

2.4.1 EmpDao

public interface EmpDao {
    public List<Emp> findAll();
}

2.4.2 EmpMapper.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">
<!--namesapce的内容必须和对应的接口路径映射-->
<mapper namespace="com.aaa.dao.EmpDao">


    <resultMap id="MyEmpMap" type="com.aaa.pojo.Emp" autoMapping="true">
        <id property="id" column="eid"/>
        <result property="name" column="ename"/>
        <result property="deptId" column="dept_id"/>
        <!--一对一标签-->
        <association property="dept" javaType="com.aaa.pojo.Dept" autoMapping="true">
            <id property="id" column="did"/>
            <result property="name" column="dname"/>
        </association>
    </resultMap>
    <!--查询所有-->
    <select id="findAll" resultMap="MyEmpMap">
        /*select * from tbl_emp;*/
        select  e.id eid,e.name ename,salary,birthday,dept_id,d.name dname,d.id did,d.loc
        from tbl_emp e join tbl_dept d on e.dept_id = d.id order by e.id
    </select>

2.5 index.jsp

加载后直接跳转

<%@ page contentType="text/html;charset=UTF-8"
         language="java" %>
<html>
<body>
<%--请求转发到controller层中的list--%>
  <jsp:forward page="/list"></jsp:forward>
</body>
</html>

3. 删除

3.1 前端jsp页面

<td>
    <input type="button" value="删除" onclick="location.href='/delete?id=${e.id}'"/>
    <input type="button" value="编辑" onclick="location.href='/update?id=${e.id}'"/>
</td>

3.2 controller层

@Controller
public class EmpController {
    @Autowired //按照类型匹配
    private EmpService empService; //EmpService类对象必须再spring中创建好
    @Autowired
    private DeptService deptService;
    
    @RequestMapping("/delete")
    public String delete(Integer id){
        int i = empService.del(id);
        return "redirect:/list"; //重定向到指定的路径  redirect:表示不会经过视图解析器 forward:请求转发 也不会经过视图解析器
    }

3.3 service层和实现层

public interface EmpService {
    int del(Integer id);
}
@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpDao empDao;

    @Override
    public int del(Integer id) {
        int i = empDao.del(id);
        return i;
    }
}

3.4 dao层和xml配置文件

public interface EmpDao {
    int del(Integer id);
}
<?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">
<!--namesapce的内容必须和对应的接口路径映射-->
<mapper namespace="com.aaa.dao.EmpDao">
      <delete id="del" >
          delete from tbl_emp where id=#{id}
      </delete>

4. 添加

4.1 前端jsp界面

增加一个添加员工的按钮

<input type="button" value="添加" onclick="location.href='/dept/list'">

点击添加按钮跳转到 /dept/list 去查询所有的部门信息

4.2 Dept表

4.2.1 controller层

@Controller
@RequestMapping("/dept")
public class DeptController {
    @Autowired
    private DeptService deptService;
    @RequestMapping("/list")
    public String list(HttpServletRequest request){
        List<Dept> list = deptService.findAll();
        request.setAttribute("depts",list);
        return "addEmp";//视图解析器
    }
}

4.2.2 service层和实现层

public interface DeptService {
    List<Dept> findAll();
}
@Service
public class DeptServiceImpl implements DeptService {
    @Autowired
    private DeptDao deptDao;
    @Override
    public List<Dept> findAll() {
        List<Dept> list = deptDao.selectAll();
        return list;
    }
}

4.2.3 dao层和xml

public interface DeptDao {
    List<Dept> selectAll();
}
<?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">
<!--namesapce的内容必须和对应的接口路径映射-->
<mapper namespace="com.aaa.dao.DeptDao">

    <select id="selectAll" resultType="com.aaa.pojo.Dept">
        select * from tbl_dept
    </select>
</mapper>

4.2.4 跳转到新建的addEmp.jsp界面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="/addEmp" method="post">
        名字:<input type="text" name="name"/><br>
        薪水:<input type="text" name="salary"/><br>
        日期:<input type="date" name="birthday"/><br>
        部门:
        <select name="deptId">
            <c:forEach items="${depts}" var="d">
                <option value="${d.id}">${d.name}</option>
            </c:forEach>
        </select><br>
       <input type="submit" value="添加员工"/>
    </form>
</body>
</html>

4.3 Emp表

4.3.1 controller层

@Controller
public class EmpController {
    @Autowired //按照类型匹配
    private EmpService empService; //EmpService类对象必须再spring中创建好
    @Autowired
    private DeptService deptService;
    @RequestMapping("/addEmp")
    public String addEmp(Emp emp){
        int row = empService.save(emp);
        return "redirect:/list";
    }

4.3.2 service层和实现层

public interface EmpService {
    int save(Emp emp);
}
@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpDao empDao;
    @Override
    public int save(Emp emp) {
        int row = empDao.insert(emp);
        return row;
    }
}

4.3.3 dao层和xml

public interface EmpDao {
    int insert(Emp emp);
}
<?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">
<!--namesapce的内容必须和对应的接口路径映射-->
<mapper namespace="com.aaa.dao.EmpDao">
<insert id="insert">
    insert into tbl_emp values(null,#{name},#{salary},#{birthday},#{deptId})
</insert>

5. 修改

5.1 前端jsp页面

<td>
    <input type="button" value="删除" onclick="location.href='/delete?id=${e.id}'"/>
    <input type="button" value="编辑" onclick="location.href='/update?id=${e.id}'"/>
</td>

点击编辑按钮 进入到Emp的controller层① 携带当前员工的id

5.2 第一层

5.2.1 controller层

@Controller
public class EmpController {
    @Autowired //按照类型匹配
    private EmpService empService; //EmpService类对象必须再spring中创建好
    @Autowired
    private DeptService deptService;
 
    @RequestMapping("/update")
    public String update(Integer id,HttpServletRequest request){
        //1.查询所有的部门信息
        List<Dept> depts = deptService.findAll();
        //2.根据id查询员工信息
         Emp emp = empService.findById(id);
        //3.保存到request
        request.setAttribute("depts",depts);
        request.setAttribute("emp",emp);
        return "updateEmp";
    }

5.2.2 service层和实现层

public interface EmpService {
    Emp findById(Integer id);
}
@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpDao empDao;
    @Override
    public Emp findById(Integer id) {
       Emp emp = empDao.selectById(id);
        return emp;
    }
}

5.2.3 dao层和xml

public interface EmpDao {
    Emp selectById(Integer id);
}
<?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">
<!--namesapce的内容必须和对应的接口路径映射-->
<mapper namespace="com.aaa.dao.EmpDao">
<select id="selectById" resultType="com.aaa.pojo.Emp">
    select id,name,salary,birthday,dept_id deptId from tbl_emp where id=#{id}
</select>

5.3 第二层

5.3.1 前端jsp页面

创建新的updateEmp.jsp更新员工页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <title>修改页面</title>
</head>
<body>
    <form action="/updateEmp" method="post">
        <input type="hidden" value="${emp.id}" name="id" />
        名字:<input type="text" name="name" value="${emp.name}"/><br>
        薪水:<input type="text" name="salary" value="${emp.salary}"/><br>
        日期:<input type="text" name="birthday" value='<fmt:formatDate value="${emp.birthday}" pattern="yyyy-MM-dd"/>'/><br>
        部门:
        <select name="deptId">
            <c:forEach items="${depts}" var="d">
                <c:if test="${d.id == emp.deptId}">
                    <option selected value="${d.id}">${d.name}</option>
                </c:if>
                <c:if test="${d.id != emp.deptId}">
                    <option value="${d.id}">${d.name}</option>
                </c:if>
            </c:forEach>
        </select><br>
        <input type="submit" value="确认修改"/>
    </form>
</body>
</html>

5.3.2 controller层

@Controller
public class EmpController {
    @Autowired //按照类型匹配
    private EmpService empService; //EmpService类对象必须再spring中创建好
    @Autowired
    private DeptService deptService;
    @RequestMapping("/updateEmp")
    public String updateEmp(Emp emp){
        int i = empService.update(emp);
        return "redirect:/list";
    }
}

5.3.3 service层和实现层

public interface EmpService {
    int update(Emp emp);
}
@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpDao empDao;
    @Override
    public int update(Emp emp) {
        int row = empDao.edit(emp);
        return row;
    }
}

5.3.4 dao层和xml

public interface EmpDao {
    int edit(Emp emp);
}
<?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">
<!--namesapce的内容必须和对应的接口路径映射-->
<mapper namespace="com.aaa.dao.EmpDao">
<update id="edit">
    update tbl_emp set name=#{name},salary=#{salary},birthday=#{birthday},dept_id=#{deptId} where id = #{id}
</update>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值