我的第一个ssm项目

第一步(建一个数据库表)

数据库文件

/*
Navicat MySQL Data Transfer

Source Server         : MySQL
Source Server Version : 80019
Source Host           : localhost:3306
Source Database       : ssmbuild

Target Server Type    : MYSQL
Target Server Version : 80019
File Encoding         : 65001

Date: 2020-05-18 00:17:41
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `books`
-- ----------------------------
DROP TABLE IF EXISTS `books`;
CREATE TABLE `books` (
  `bookID` int NOT NULL AUTO_INCREMENT COMMENT '娑旑洀d',
  `bookName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '书名',
  `bookCounts` int NOT NULL COMMENT '涔︾殑鏁伴噺',
  `detail` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '书的表述',
  PRIMARY KEY (`bookID`),
  KEY `bookID` (`bookID`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of books
-- ----------------------------
INSERT INTO `books` VALUES ('1', 'Java', '111', '从入门到放弃');
INSERT INTO `books` VALUES ('2', 'MySQL222', '10', '从删库到跑路');
INSERT INTO `books` VALUES ('3', 'Linux', '5', '从进门到进牢');
INSERT INTO `books` VALUES ('4', 'xsa', '21', 'xs');
INSERT INTO `books` VALUES ('9', 'aaa', '2', '2');

第二步(建一个Maven项目)

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>ssm</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--Maven资源过滤设置-->
    <build>
        <finalName>SSMDemo5</finalName>
        <!--解决Intellij构建项目时,target/classes目录下不存在mapper.xml文件-->
        <resources>
            <resource>
                <directory>${basedir}/src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

<dependencies>
      <!--Junit-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
        <scope>test</scope>
    </dependency>
    <dependency>
           <!--数据库驱动-->
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.19</version>
    </dependency>
   <!-- 数据库连接池 -->
    <dependency>
        <groupId>com.mchange</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.5.2</version>
    </dependency>
    
     <!--Servlet - JSP -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.2</version>
    </dependency>
       <!--Mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.2</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.0.2</version>
    </dependency>
       <!--Spring-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.5.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.1.9.RELEASE</version>
    </dependency>
       <!--lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.10</version>
    </dependency>
     <!--aop-->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.9.4</version>
    </dependency>
     <!--json-->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.11.0</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.60</version>
    </dependency>
</dependencies>
</project>

第三步( 建立基本结构和配置框架 )

  • com.wxs.pojo

  • com.wxs.dao

  • com.wxs.service

  • com.wxs.controller

  • mybatis-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>
        
    </configuration>
    
  • applicationContext.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"     
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd"> 
    
</beans>

第四步(编写持久层)

  • com.wxs.pojo.Books.java

    package com.wxs.pojo;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Books {
        private int bookID;
        private String bookName;
        private int bookCounts;
        private String detail;
    }
    
    
  • com.wxs.dao.BookMap.java

    package com.wxs.dao;
    
    import com.wxs.pojo.Books;
    import org.apache.ibatis.annotations.Param;
    
    import java.util.List;
    
    public interface BookMap {
        public int addBook(Books books);
        public int deleteBook(@Param("bookID") int id);
        public int updateBook(Books books);
        public Books findById(@Param("bookID") int id);
        public List<Books> findBooks();
        public List<Books> findByName(@Param("bookName") String name);
    }
    
    
  • com.wxs.dao.BookMap.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wxs.dao.BookMap">
    <insert id="addBook" parameterType="books">
        insert into ssmbuild.books(bookID, bookName, bookCounts, detail)
        values (null, #{bookName}, #{bookCounts}, #{detail});
    </insert>
    <delete id="deleteBook">
        delete ssmbuild.books
        from ssmbuild.books
        where bookID = #{bookID}
    </delete>
    <update id="updateBook" parameterType="books">
        update ssmbuild.books
        set bookCounts =#{bookCounts},bookName = #{bookName},detail = #{detail}
        where bookID = #{bookID} ;
    </update>
    <select id="findById" resultType="books">
        select *
        from ssmbuild.books where bookID = #{bookID};
    </select>
    <select id="findBooks" resultType="books">
        select *
        from ssmbuild.books;
    </select>
    <select id="findByName" resultType="books" parameterType="String">
        select *
        from ssmbuild.books where bookName like '%${bookName}%';
    </select>
</mapper>database.properties
  • database.properties( 编写MyBatis的核心配置文件 )

    <?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>
       <settings>
          <setting name="logImpl" value="STDOUT_LOGGING"/>
      </settings>
    //配置别名
        <typeAliases>
            <package name="com.wxs.pojo"/>
        </typeAliases>
    <mappers>
        <mapper class="com.wxs.dao.BookMap"/>
    </mappers>
    </configuration>
    
  • 数据库配置文件 (database.properties)

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssmbuilduseUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
jdbc.username=root
jdbc.password=root

第五步(编写业务层)

  • com.wxs.service.BookService(接口)

    package com.wxs.service;
    
    import com.wxs.pojo.Books;
    import org.apache.ibatis.annotations.Param;
    
    import java.util.List;
    
    public interface BookService {
        public int addBook(Books books);
        public int deleteBook(int id);
        public int updateBook(Books books);
        public Books findById(int id);
        public List<Books> findBooks();
        public List<Books> findBookName(String name);
    }
    
    
  • com.wxs.service.BookService(实现类)

    package com.wxs.service;
    
    import com.wxs.dao.BookMap;
    import com.wxs.pojo.Books;
    
    import java.util.List;
    
    public class BookServiceImpl implements BookService {
        BookMap bookMap;
    
        public void setBookMap(BookMap bookMap) {
            this.bookMap = bookMap;
        }
    
        public int addBook(Books books) {
            return bookMap.addBook(books);
        }
    
        public int deleteBook(int id) {
            return bookMap.deleteBook(id);
        }
    
        public int updateBook(Books books) {
            return bookMap.updateBook(books);
        }
    
        public Books findById(int id) {
            return bookMap.findById(id);
        }
    
        public List<Books> findBooks() {
            return bookMap.findBooks();
        }
    
        public List<Books> findBookName(String name) {
            return bookMap.findByName(name);
        }
    }
    
    

    第六步(spring整合dao和service)

  • spring-dao.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"
           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">
       <!-- 配置整合mybatis -->
       <!-- 1.关联数据库文件 -->
        <context:property-placeholder location="classpath:database.properties"/>
       <!-- 2.数据库连接池 -->
       <!--数据库连接池
           dbcp 半自动化操作 不能自动连接
           c3p0 自动化操作(自动的加载配置文件 并且设置到对象里面)
       -->
        <bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource">
             <!-- 配置连接池属性 -->
            <property name="jdbcUrl" value="${jdbc.url}"/>
            <property name="user" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
            <property name="driverClass" value="${jdbc.driver}"/>
            <!-- c3p0连接池的私有属性 -->
            <property name="maxPoolSize" value="30"/>
            <property name="minPoolSize" value="10"/>
             <!-- 关闭连接后不自动commit -->
            <property name="autoCommitOnClose" value="false"/>
             <!-- 获取连接超时时间 -->
            <property name="checkoutTimeout" value="10000"/>
            <!--获取连接失败重试次数-->
            <property name="acquireRetryAttempts" value="2"/>
        </bean>
      <!-- 3.配置SqlSessionFactory对象 -->
        <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
             <!-- 注入数据库连接池 -->
            <property name="dataSource" ref="dataSource"/>
              <!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
            <property name="configLocation" value="classpath:mybatis-config.xml"/>
        </bean>
           <!-- 4.配置扫描Dao接口包,动态实现Dao接口注入到spring容器中 -->
       <!--解释 :https://www.cnblogs.com/jpfss/p/7799806.html-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
              <!-- 注入sqlSessionFactory -->
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
             <!-- 给出需要扫描Dao接口包 -->
            <property name="basePackage" value="com.wxs.dao"/>
        </bean>
    </beans>
    
  • spring-service.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"
           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">
           <!-- 扫描service相关的bean -->
        <context:component-scan base-package="com.wxs.service"/>
           <!--BookServiceImpl注入到IOC容器中-->
        <bean class="com.wxs.service.BookServiceImpl" id="service">
            <property name="bookMap" ref="bookMap"/>
        </bean>
           <!-- 配置事务管理器 -->
        <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
    
    </beans>
    

    第七步(编写controller层,并整合)

    spring-mvc.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:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <!--    注解驱动-->
        <mvc:annotation-driven/>
    <!--    静态资源过滤-->
        <mvc:default-servlet-handler/>
    <!--    开启注解扫描-->
        <context:component-scan base-package="com.wxs.controller"/>
    <!--    视图转发器-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
    
    </beans>
    

    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">
        <servlet>
            <servlet-name>springMVC</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:applicationContext.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>springMVC</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        <filter>
            <filter-name>encodingFilter</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>encodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    </web-app>
    

applicationContext.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <import resource="classpath:spring-dao"/>
    <import resource="classpath:spring-service.xml"/>
    <import resource="spring-mvc"/>
</beans>

com.wxs.controller.bookController

package com.wxs.controller;


import com.wxs.pojo.Books;
import com.wxs.service.BookServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@Controller
@RequestMapping("/book")
public class bookController {
    @Autowired
    @Qualifier("service")
    private BookServiceImpl bookService;
    @RequestMapping("/allBooks")
    public String allBooks(Model model){
        List<Books> books = bookService.findBooks();
        model.addAttribute("list",books);
        return "allBook";
    }
    @RequestMapping("/toAddBook")
    public String toAddBook(){
        return "addBook";
    }
    @RequestMapping("/addBook")
    public String addBook(Books books){
        System.out.println(books);
        bookService.addBook(books);
        return "redirect:/book/allBooks";
    }
    @RequestMapping("/toUpdateBook")
    public String toUpdateBook(int id,Model model){
        Books books = bookService.findById(id);
        model.addAttribute("QBook",books);
        return "upDateBooks";
    }
    @RequestMapping("/updateBook")
    public String toUpdateBook(Books books){
        bookService.updateBook(books);
        return "redirect:/book/allBooks";
    }
    @RequestMapping("/deleteBook")
    public String toUpdateBook(int id){
        bookService.deleteBook(id);
        return "redirect:/book/allBooks";
    }
    @RequestMapping("/queryBooks")
    public String queryBooks(String QBookName,Model model){
        List<Books> books = bookService.findBookName(QBookName);
        model.addAttribute("list",books);
        return "allBook";
    }
}

index.jsp

<%--
  Created by IntelliJ IDEA.
  User: 武祥市
  Date: 2020/5/10
  Time: 18:37
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>书籍</title>
</head>
<style>
  a{
    text-decoration: none;
    color: black;
    font-size: 50px;
  }
  h2{
    width: 300px;
    height: 100px;
    text-align: center;
    margin: 100px auto;
    line-height: 100px;
    background: deepskyblue;
    border-radius: 20px;
  }
</style>
<body>
<h2>
  <a href="${pageContext.request.contextPath}/book/allBooks">书籍</a>
</h2>
</body>
</html>

allBook.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: 武祥市
  Date: 2020/5/17
  Time: 19:41
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>

    <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <title>书籍展示</title>
</head>
<body>
<div class="container">
    <div class="row clearfix">
        <div class="col-md-12 column-drag-header">
            <div class="page-header">
                <h1>
                    <small>书籍列表----------显示所有的书籍</small>
                </h1>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-md-4 column">
            <a class="btn btn-primary" href="${pageContext.request.contextPath}/book/toAddBook">新增</a>
        </div>
        <div class="col-md-8 column">
            <form class="from-inline" action="${pageContext.request.contextPath}/book/queryBooks" method="post" style="float: right">
                <input type="text" name="QBookName" class="form-control" placeholder="请输入">
                <input type="submit" class="btn btn-primary" value="搜索🔍">
            </form>
        </div>
    </div>
    <div class="row clearfix">
        <div class="col-md-12 column-drag-header">
            <table class="table table-hover table-striped">
                <thead>
                <tr>
                    <th>书籍编号</th>
                    <th>书籍名称</th>
                    <th>书籍数量</th>
                    <th>书籍详情</th>
                    <th>基本操作</th>
                </tr>
                </thead>
                <tbody>
                <c:forEach var="book" items="${list}">
                <tr>
                    <td>${book.bookID}</td>
                    <td>${book.bookName}</td>
                    <td>${book.bookCounts}</td>
                    <td>${book.detail}</td>
                    <td>
                        <a href="${pageContext.request.contextPath}/book/toUpdateBook?id=${book.bookID}">修改</a>&nbsp;|
                        &nbsp;
                        <a href="${pageContext.request.contextPath}/book/deleteBook?id=${book.bookID}">删除</a>
                    </td>
                </tr>
                </c:forEach>
                </tbody>
            </table>
        </div>
    </div>
</div>
</body>
</html>

addBook.jsp

<%--
  Created by IntelliJ IDEA.
  User: 武祥市
  Date: 2020/5/17
  Time: 21:44
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">

</head>
<body>
<div class="container">

    <div class="row clearfix">
        <div class="col-md-12 column">
            <div class="page-header">
                <h1>
                    <small>新增书籍</small>
                </h1>
            </div>
        </div>
    </div>
    <form action="${pageContext.request.contextPath}/book/addBook" method="post">
        <div class="form-group">
            <label>书的名称</label>
            <input name="bookName" type="text" class="form-control"  required>
        </div>
        <div class="form-group">
            <label>书的数量</label>
            <input name="bookCounts" type="text" class="form-control" required>
        </div>
        <div class="form-group">
            <label>书的信息</label>
            <input name="detail" type="text" class="form-control" required>
        </div>
        <div class="form-group">
            <input type="submit" class="form-control" value="添加">
        </div>
    </form>
</div>
</body>
</html>

upDateBooks.jsp

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
  Created by IntelliJ IDEA.
  User: 武祥市
  Date: 2020/5/17
  Time: 21:44
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">

</head>
<body>
<div class="container">

    <div class="row clearfix">
        <div class="col-md-12 column">
            <div class="page-header">
                <h1>
                    <small>修改书籍</small>
                </h1>
            </div>
        </div>
    </div>
    <form action="${pageContext.request.contextPath}/book/updateBook" method="post">
        <input type="hidden" value="${QBook.bookID}" name="bookID">
        <div class="form-group">
            <label>书的名称</label>
            <input name="bookName" type="text" class="form-control" value="${QBook.bookName}" required>
        </div>
        <div class="form-group">
            <label>书的数量</label>
            <input name="bookCounts" type="text" class="form-control" value="${QBook.bookCounts}" required>
        </div>
        <div class="form-group">
            <label>书的信息</label>
            <input name="detail" type="text" class="form-control" value="${QBook.detail}" required>
        </div>
        <div class="form-group">
            <input type="submit" class="form-control" value="添加">
        </div>
    </form>
</div>
</body>
</html>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值