(超详细)IDEA利用Maven 整合SSM (Springmvc + Spring + Mybatis)

一、前言

最近在学习spring框架,当学完Springmvc 、Spring、Mybatis和Maven之后,想用Maven整合SSM的时候,出现了好多的问题,在网上查了好多的资料,但是网上的例子大都的是一些eclipse编写的,不能很好的在IDEA上使用,而IDEA版本的都比较久远了。所以我用了千辛万苦才将之搞定,现在将过程分享给大家。希望能够给同样在学习框架初期的小伙伴一点帮助。

二、开发工具

Tomcat 9.0.27
Maven 3.6.3
MySQL 8.0.13
jdk 1.8
intellij idea: 2019.2.3

三、创建Maven工程
  1. 新建Maven工程,创建Web项目,选用 IDEA 提供的webapp骨架
    在这里插入图片描述
  2. 填写GroupId、ArtifactId

在这里插入图片描述
3. 选择下载好的Maven ,指定Maven所在路径,settings file 所在路径及 repository所在路径。
在这里插入图片描述
4. 输入项目名称,选择所在路径
在这里插入图片描述
5. 项目结构如下
在这里插入图片描述

四、创建项目目录并标记资源目录
  1. 创建项目目录
    在这里插入图片描述
    创建好项目目录之后,我的直接生成了对应的资源目录,如果没有生成的话,可以对照文件夹的颜色形状手动生成
    在这里插入图片描述
五、配置pom.xml 文件,导入spring、springmvc、mybatis 等相关依赖
<?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.marchsoft</groupId>
  <artifactId>SSM-Test</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <!-- 统一管理jar包版本 -->
  <properties>
    <spring.version>5.0.2.RELEASE</spring.version>
    <slf4j.version>1.6.6</slf4j.version>
    <log4j.version>1.2.12</log4j.version>
    <shiro.version>1.2.3</shiro.version>
    <mysql.version>8.0.12</mysql.version>
    <mybatis.version>3.4.5</mybatis.version>
    <jackson.version>2.9.8</jackson.version>
    <spring.security.version>5.0.1.RELEASE</spring.security.version>
  </properties>

  <!-- 锁定jar包版本 -->
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>${mybatis.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <!-- 项目依赖jar包 -->
  <dependencies>
  
    <!-- spring -->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.6.8</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>
    
    <!--测试-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    
	<!--数据库-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${mysql.version}</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

	<!--jsp相关-->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    
    <!-- 日志 -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>${log4j.version}</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>${slf4j.version}</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>${slf4j.version}</version>
    </dependency>
    
    <!-- mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>

	<!--连接池-->
    <dependency>
      <groupId>c3p0</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.1.2</version>
      <type>jar</type>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.4</version>
    </dependency>
    <dependency>
      <groupId>commons-pool</groupId>
      <artifactId>commons-pool</artifactId>
      <version>1.5.4</version>
    </dependency>
    
	<!--分页-->
    <dependency>  
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.1.2</version>
    </dependency>

	<!--认证和访问控制功能-->
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-web</artifactId>
      <version>${spring.security.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-config</artifactId>
      <version>${spring.security.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-core</artifactId>
      <version>${spring.security.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-taglibs</artifactId>
      <version>${spring.security.version}</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.0.9</version>
    </dependency>

	<!--实现文件上传-->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>
    
    <!-- Jackson Json处理工具包 -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.jr</groupId>
      <artifactId>jackson-jr-all</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-core-asl</artifactId>
      <version>1.9.13</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <version>1.9.13</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
        <!--设置jdk版本-->
          <source>1.8</source>
          <target>1.8</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

六、配置相关文件
  1. springmvc.xml
<?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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       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
			    http://www.springframework.org/schema/context/spring-context.xsd
			    http://www.springframework.org/schema/aop
			    http://www.springframework.org/schema/aop/spring-aop.xsd
			    http://www.springframework.org/schema/tx
			    http://www.springframework.org/schema/tx/spring-tx.xsd
			    http://www.springframework.org/schema/mvc
			    http://www.springframework.org/schema/mvc/spring-mvc.xsd">

        <!--  配置包扫描  -->
        <context:component-scan base-package="com.marchsoft.*"/>

        <!--  开启springmvc注解驱动  -->
        <mvc:annotation-driven/>

        <!--  配置视图解析器  -->
        <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!--  配置前缀  -->
            <property name="prefix" value="/views/"></property>
            <!--  配置后缀  -->
            <property name="suffix" value=".jsp"></property>
        </bean>


        <!--  配置文件上传  -->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <!-- 配置默认编码   -->
            <property name="defaultEncoding" value="UTF-8"></property>
            <!--  配置所有文件的总上传大小  -->
            <property name="maxInMemorySize" value="10485760"></property>
        </bean>


        <!--  配置定时器任务  -->


</beans>
  1. jdbc.properties (我这里使用的连接池是c3p0,在pom.xml中导入了,c3p0、dbcp、druid,大家可以根据自己的喜好进行选用)
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/day0427?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
jdbc.username=root
jdbc.password=123456
#最大连接数
c3p0.maxPoolSize=30
#最小连接数
c3p0.minPoolSize=10
#关闭连接后不自动commit
c3p0.autoCommitOnClose=false
#获取连接超时时间
c3p0.checkoutTimeout=10000
#当获取连接失败重试次数
c3p0.acquireRetryAttempts=2
  1. applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
		http://www.springframework.org/schema/mvc
		http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
		http://www.springframework.org/schema/context
		http://www.springframework.org/schema/context/spring-context-3.2.xsd
		http://www.springframework.org/schema/aop
		http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
		http://www.springframework.org/schema/tx
		http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">


    <!-- 加载自定配置文件(内部装载数据库登录信息) -->
    <bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties"></property>
    </bean>

    <!-- 配置数据源(连接池) -->
    <!-- 数据库连接池 -->
    <bean id="basicDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>
        <property name="minPoolSize" value="${c3p0.minPoolSize}"/>
        <property name="autoCommitOnClose" value="${c3p0.autoCommitOnClose}"/>
        <property name="checkoutTimeout" value="${c3p0.checkoutTimeout}"/>
        <property name="acquireRetryAttempts" value="${c3p0.acquireRetryAttempts}"/>
    </bean>

    <!-- 配置sqlSessionFactory -->
    <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入数据源-->
        <property name="dataSource" ref="basicDataSource"></property>
        <!--指定xml文件的存放位置-->
        <property name="mapperLocations" value="classpath*:com/marchsoft/mapper/*.xml"></property>
        <!-- 指定mybatis主配置文件   -->
        <property name="configLocation" value="classpath:mybatis.xml"></property>

    </bean>

    <!-- 读取dao层接口类,将dao接口与对应的xml文件关联: MapperScannerConfigurer-->
    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--指定dao接口类的位置-->
        <property name="basePackage" value="com.marchsoft.mapper"></property>
    </bean>

</beans>
  1. log4j.properties
log4j.rootLogger=WARN, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%5p [%t] (%F:%L) - %m%n
  1. web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">

  
    <!--  配置默认访问首页  -->
    <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <!-- 配置处理中文乱码的过滤器类   -->
    <filter>
      <filter-name>characterEncodingFilter</filter-name>
      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
      <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
      </init-param>
    </filter>
    <filter-mapping>
      <filter-name>characterEncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--配置监听器,读取applicationContext.xml文件:ContestLoaderLister-->
    <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- 配置springmvc的核心类  DispatcherServlet 读取springmvc.xml -->
      <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!--优先读取-->
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
      </servlet-mapping>
  
    <!-- 配置错误界面   -->
    <error-page>
      <error-code>404</error-code>
      <location>./views/error/404.jsp</location>
    </error-page>
</web-app>

七、创建测试程序

创建
在这里插入图片描述

  1. UserController
package com.marchsoft.controller;

import com.github.pagehelper.PageInfo;
import com.marchsoft.service.UserService;
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.ResponseBody;

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

/**
 * @Auther:焦前进
 * @Data:2019/12/4 17:14
 * @Descripaion:
 */
@Controller
@RequestMapping("/admin")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/getPageUsers")
    public @ResponseBody List<Map<String,Object>> getPageUsers(Integer pageNum,Integer pageSize){
        List<Map<String,Object>> userList = userService.findPageUsers(pageNum,pageSize);
        PageInfo<Map<String,Object>> pageInfo = new PageInfo<>(userList);
        return pageInfo.getList();
    }

}

  1. UserMapper
package com.marchsoft.mapper;

import org.apache.ibatis.annotations.Select;

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

/**
 * @Auther:焦前进
 * @Data:2019/12/4 17:15
 * @Descripaion:
 */
public interface UserMapper {
    //分页
    @Select("select * from user")
    List<Map<String, Object>> selectPageUsers();
}
  1. UserServiceImpl
package com.marchsoft.service.impl;

import com.github.pagehelper.PageHelper;
import com.marchsoft.mapper.UserMapper;
import com.marchsoft.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;

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

/**
 * @Auther:焦前进
 * @Data:2019/12/4 17:16
 * @Descripaion:
 */
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    public List<Map<String, Object>> findPageUsers(Integer pageNum, Integer pageSize) {
        //分页
        PageHelper.startPage(pageNum,pageSize);
        return userMapper.selectPageUsers();
    }
}

  1. UserService
package com.marchsoft.service;

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

/**
 * @Auther:焦前进
 * @Data:2019/12/4 17:17
 * @Descripaion:
 */
public interface UserService {
    List<Map<String, Object>> findPageUsers(Integer pageNum, Integer pageSize);
}

  1. 因为设置了分页,所以在mybatis.xml中配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>


    <!--  配置别名  -->

    <!--  配置pageHelper  -->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
        </plugin>
    </plugins>
</configuration>
八、配置Tomcat

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

九、测试及错误处理

运行tomact,发现控制台报出以下错误
在这里插入图片描述
出现该错误的原因是因为jar包没有正确导入,打开File–>Project Sturcture–>Artifacts
在这里插入图片描述
WEB-INF下没有相应的jar包,我们在WEB-INF下新建一个jar文件夹
在这里插入图片描述
选中lib文件夹,点击上方 + 选择Library Files,选中里面的所有文件
在这里插入图片描述
在这里插入图片描述
此时,再次启动服务器,输入http://localhost:8080/maven_ssm_war_exploded/admin/getPageUsers.do?pageNum=1&pageSize=2运行成功
在这里插入图片描述

十、扩展,传值到指定的jsp页面
  1. UserController中添加方法
    /**
     * 传值到jsp页面
     * @param model
     * @return
     */
    @RequestMapping("/getUsers")
    public String getUsers(Model model){
        List<Map<String,Object>> userlist = userService.findUsers();
        model.addAttribute("userlist",userlist);
        return "admin/test";
    }
  1. UserMapper中添加
   @Select("select * from user")
    List<Map<String,Object>> selectUsers();
  1. UserServiceImpl中添加
   public List<Map<String,Object>> findUsers(){
        return userMapper.selectUsers();
    }
  1. UserService中添加
public List<Map<String,Object>> findUsers();
  1. 在 admin文件夹中添加test.jsp
<%--
  Created by IntelliJ IDEA.
  User: dell
  Date: 2019/12/4
  Time: 8:22
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>测试数据</title>
</head>
<body>
<table border="1">
    <tr>
        <td>序号</td>
        <td>姓名</td>
        <td>性别</td>
        <td>出生日期</td>
    </tr>

    <c:forEach items="${userlist}" var="item">
        <tr>
            <td>${item.id}</td>
            <td>${item.username}</td>
            <c:if test="${item.sex == 1}" >
                <td></td>
            </c:if>
            <c:if test="${item.sex == 2}" >
                <td></td>
            </c:if>
            <c:if test="${empty item.sex}" >
                <td>太监</td>
            </c:if>

            <td>${item.birthday}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

  1. 运行服务器,输入http://localhost:8080/maven_ssm_war_exploded/admin/getUsers.do,测试成功
    在这里插入图片描述
总结

在用Maven整合ssm的时候出现了好多的bug,得到的心得是,当项目报错时,不要直接复制错误信息百度,因为同样的错误也会有很多的原因,所以应该先认真分析控制台报错信息,找到源头,对症下药。同时在编写程序的时候也应该仔细,认真,严谨,避免出现低级错误。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值