为了账号安全,请及时绑定邮箱和手机立即绑定

Java主流框架入门:从零开始搭建你的第一个项目

概述

本文介绍了Java主流框架的概念与作用,并详细讲解了Spring、MyBatis和Hibernate等主流框架的入门知识。通过实际案例,我们学习了如何使用这些框架进行开发,并实践了Spring与MyBatis的集成。文章还指导了项目的部署与运行,帮助读者全面掌握Java主流框架入门。java主流框架入门包括框架的基本概念、应用场景和实际开发中的应用。

Java主流框架概述

1.1 框架的概念与作用

框架是指一个软件系统或软件库,它提供了一种抽象层,让开发者可以专注于解决问题的核心逻辑,而无需处理底层的复杂性。框架通过定义一组通用的接口和实现来简化开发过程,使得开发者可以更高效地编写代码。框架的主要作用包括:

  • 降低代码复杂度:框架提供了一套标准的接口和实现,使得开发者可以专注于业务逻辑,而不必处理底层的复杂性。
  • 提高开发效率:框架提供了一套通用的解决方案,使得开发者可以快速地实现功能,而无需重复造轮子。
  • 提高代码可维护性:框架提供了一套标准的接口和实现,使得代码更加规范,易于维护。

1.2 常见的Java主流框架介绍

Java语言由于其跨平台、高效、稳定等特性,成为了开发大型企业应用的首选语言之一。在Java开发中,有许多主流框架被广泛使用,下面是一些常见的Java主流框架:

  • Spring:Spring是一个开源的Java平台相关的一个轻量级的开源框架。它是一个全面的Java EE框架,包括IoC容器、AOP、MVC框架等。
  • MyBatis:MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs映射成数据库中的记录。
  • Hibernate:Hibernate是一个持久层框架,它提供了一个对象关系映射的机制,可以将Java对象映射到数据库表,并提供了丰富的API来进行数据库操作。

前置知识准备

2.1 Java基础知识回顾

在开始学习主流框架之前,首先需要回顾一下Java语言的一些基础知识,以便更好地理解后续的内容。

2.1.1 变量与类型

在Java中,变量是用来存储数据的容器,可以分为基本类型和引用类型。基本类型包括:byteshortintlongfloatdoublecharboolean。引用类型包括:对象、数组等。

示例代码:

public class VariableExample {
    public static void main(String[] args) {
        byte byteValue = 127;
        short shortValue = 32767;
        int intValue = 2147483647;
        long longValue = 9223372036854775807L;
        float floatValue = 123.45f;
        double doubleValue = 123.456789;
        char charValue = 'A';
        boolean booleanValue = true;

        System.out.println("byte: " + byteValue);
        System.out.println("short: " + shortValue);
        System.out.println("int: " + intValue);
        System.out.println("long: " + longValue);
        System.out.println("float: " + floatValue);
        System.out.println("double: " + doubleValue);
        System.out.println("char: " + charValue);
        System.out.println("boolean: " + booleanValue);
    }
}
2.1.2 Java类与对象

在Java中,类是对象的蓝图,对象是类的实例。每个类都有一个构造方法,用于创建对象时使用。对象有属性和方法。

示例代码:

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void introduce() {
        System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person("John", 30);
        person.introduce();
    }
}

2.2 开发环境搭建

在开始开发之前,需要搭建好开发环境。以下是搭建Java开发环境的步骤:

  1. 安装JDK:确保你的系统已经安装了JDK。可以从Oracle官网下载JDK安装包。
  2. 安装IDE:推荐使用IntelliJ IDEA或Eclipse作为开发工具。
  3. 配置环境变量:将JDK的bin目录添加到PATH环境变量中。
  4. 验证安装:打开命令行,输入java -version命令,查看是否能正确输出JDK版本信息。

Spring框架入门

3.1 Spring框架简介

Spring框架是一个强大的开源框架,提供了一个全面的Java平台相关的一站式服务。Spring框架的核心功能包括IoC容器、AOP、MVC框架等。Spring框架通过依赖注入(DI)和面向切面编程(AOP)等技术,简化了Java应用的开发。

3.2 Spring的核心功能与应用场景

Spring框架的核心功能包括:

  • 依赖注入(DI):Spring通过IoC容器管理对象的生命周期,将对象的依赖关系通过配置文件或注解注入到对象中。
  • 面向切面编程(AOP):Spring通过AOP技术,可以在不改变原有代码的情况下,为程序添加额外的功能,如日志记录、事务管理等。
  • MVC框架:Spring MVC是一个轻量级的Web框架,基于MVC设计模式,提供了一套强大的工具来处理Web请求和响应。

Spring框架的应用场景包括:

  • 企业级应用开发:Spring框架提供了丰富的功能,包括IoC容器、AOP、MVC框架等,非常适合企业级应用的开发。
  • Web应用开发:Spring MVC框架提供了一套强大的工具来处理Web请求和响应,使得Web应用开发更加简单。
  • 分布式系统开发:Spring框架提供了丰富的分布式系统开发工具,包括Spring Cloud、Spring Boot等。

示例代码:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/greeting")
public class GreetingController {

    @GetMapping
    public String greeting() {
        return "Hello, Spring!";
    }
}

3.3 创建第一个Spring应用

为了更好地理解Spring框架,我们可以通过一个简单的示例来创建第一个Spring应用。

3.3.1 创建Spring项目

首先,通过IDE创建一个Spring项目。这里以IntelliJ IDEA为例,步骤如下:

  1. 打开IntelliJ IDEA,选择File -> New -> Project
  2. 在弹出的窗口中选择Spring Initializr,点击Next
  3. 输入项目信息,如GroupArtifact等,选择JavaSpring Web作为依赖,点击Next
  4. 选择项目位置,点击Finish
3.3.2 创建第一个Spring Controller

接下来,创建一个简单的Spring Controller,用于处理HTTP请求。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/greeting")
public class GreetingController {

    @GetMapping
    public String greeting() {
        return "Hello, Spring!";
    }
}
3.3.3 配置Spring Boot启动类

创建一个Spring Boot启动类,用于启动Spring应用。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootApp {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootApp.class, args);
    }
}
3.3.4 运行Spring应用

在IDE中运行Spring Boot启动类,启动Spring应用。打开浏览器,访问http://localhost:8080/greeting,可以看到输出Hello, Spring!

MyBatis框架入门

4.1 MyBatis框架简介

MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs映射成数据库中的记录。

4.2 MyBatis的工作原理

MyBatis的工作原理可以分为以下几个步骤:

  1. 读取配置文件:MyBatis通过读取配置文件mybatis-config.xml,获取数据库连接信息、映射文件位置等配置信息。
  2. 解析映射文件:MyBatis解析映射文件(XML或注解),生成映射关系。
  3. 执行SQL:MyBatis通过JDBC执行SQL语句,获取数据库返回的结果集。
  4. 处理结果集:MyBatis将结果集转换为Java对象,并返回给客户端。

4.3 创建第一个MyBatis应用

为了更好地理解MyBatis框架,我们可以通过一个简单的示例来创建第一个MyBatis应用。

4.3.1 创建MyBatis项目

首先,通过IDE创建一个MyBatis项目。这里以IntelliJ IDEA为例,步骤如下:

  1. 打开IntelliJ IDEA,选择File -> New -> Project
  2. 在弹出的窗口中选择Spring Initializr,点击Next
  3. 输入项目信息,选择JavaSpring Web作为依赖,点击Next
  4. 选择项目位置,点击Finish
4.3.2 配置MyBatis

在项目中创建一个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>
    <typeAliases>
        <typeAlias type="com.example.demo.model.User" alias="User"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/demo/mapper/UserMapper.xml"/>
    </mappers>
</configuration>
4.3.3 创建User实体类

创建一个简单的User实体类,用于映射数据库中的用户表。

public class User {
    private int id;
    private String name;
    private String password;

    // Getter and Setter
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
4.3.4 创建UserMapper接口和映射文件

创建一个UserMapper接口,并创建对应的XML映射文件。

import com.example.demo.model.User;

import java.util.List;

public interface UserMapper {
    List<User> selectAllUsers();
}
<?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.example.demo.mapper.UserMapper">
    <select id="selectAllUsers" resultType="com.example.demo.model.User">
        SELECT * FROM users
    </select>
</mapper>
4.3.5 创建Service和Controller

创建一个Service类和Controller类,用于处理数据库操作和HTTP请求。

import com.example.demo.mapper.UserMapper;
import com.example.demo.model.User;
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 java.io.IOException;
import java.util.List;

public class UserService {
    private SqlSessionFactory sqlSessionFactory;

    public UserService() throws IOException {
        String resource = "mybatis-config.xml";
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources
                .getResourceAsStream(resource));
    }

    public List<User> getAllUsers() {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            return mapper.selectAllUsers();
        }
    }
}
import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }
}
4.3.6 配置Spring Boot启动类

创建一个Spring Boot启动类,用于启动Spring应用。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyBatisApp {
    public static void main(String[] args) {
        SpringApplication.run(MyBatisApp.class, args);
    }
}
4.3.7 运行MyBatis应用

在IDE中运行Spring Boot启动类,启动Spring应用。打开浏览器,访问http://localhost:8080/users,可以看到输出所有用户的列表。

Hibernate框架入门

5.1 Hibernate框架简介

Hibernate是一个持久层框架,它提供了一个对象关系映射的机制,可以将Java对象映射到数据库表,并提供了丰富的API来进行数据库操作。Hibernate通过JDBC和事务管理来与数据库交互。

5.2 Hibernate的核心功能与应用场景

Hibernate的核心功能包括:

  • 对象关系映射(ORM):Hibernate通过ORM机制,将Java对象映射为数据库表,使得Java对象可以透明地访问数据库。
  • 事务管理:Hibernate提供了丰富的API来进行事务管理,确保数据的一致性和完整性。
  • 缓存机制:Hibernate提供了二级缓存机制,可以提高数据访问的效率。

Hibernate的应用场景包括:

  • 企业级应用开发:Hibernate提供了丰富的功能,包括ORM、事务管理等,非常适合企业级应用的开发。
  • Web应用开发:Hibernate提供了丰富的API,可以方便地进行数据库操作,非常适合Web应用的开发。
  • 分布式系统开发:Hibernate提供了丰富的API,可以方便地进行数据库操作,非常适合分布式系统的开发。

示例代码:

import com.example.demo.model.User;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import java.util.List;

public class UserService {
    public List<User> getAllUsers() {
        Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
        Session session = configuration.buildSessionFactory().openSession();
        Transaction transaction = session.beginTransaction();
        List<User> users = session.createQuery("FROM User").list();
        transaction.commit();
        session.close();
        return users;
    }
}

5.3 创建第一个Hibernate应用

为了更好地理解Hibernate框架,我们可以通过一个简单的示例来创建第一个Hibernate应用。

5.3.1 创建Hibernate项目

首先,通过IDE创建一个Hibernate项目。这里以IntelliJ IDEA为例,步骤如下:

  1. 打开IntelliJ IDEA,选择File -> New -> Project
  2. 在弹出的窗口中选择Spring Initializr,点击Next
  3. 输入项目信息,选择JavaSpring Web作为依赖,点击Next
  4. 选择项目位置,点击Finish
5.3.2 配置Hibernate

在项目中创建一个hibernate.cfg.xml配置文件,配置数据库连接信息和映射文件位置。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">password</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <mapping class="com.example.demo.model.User"/>
    </session-factory>
</hibernate-configuration>
5.3.3 创建User实体类

创建一个简单的User实体类,用于映射数据库中的用户表。

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;
    private String password;

    // Getter and Setter
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
5.3.4 创建Service和Controller

创建一个Service类和Controller类,用于处理数据库操作和HTTP请求。

import com.example.demo.model.User;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import java.util.List;

public class UserService {
    public List<User> getAllUsers() {
        Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
        Session session = configuration.buildSessionFactory().openSession();
        Transaction transaction = session.beginTransaction();
        List<User> users = session.createQuery("FROM User").list();
        transaction.commit();
        session.close();
        return users;
    }
}
import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {
    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }
}
5.3.5 配置Spring Boot启动类

创建一个Spring Boot启动类,用于启动Spring应用。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HibernateApp {
    public static void main(String[] args) {
        SpringApplication.run(HibernateApp.class, args);
    }
}
5.3.6 运行Hibernate应用

在IDE中运行Spring Boot启动类,启动Spring应用。打开浏览器,访问http://localhost:8080/users,可以看到输出所有用户的列表。

实战练习与项目部署

6.1 集成Spring与MyBatis开发项目

为了更好地理解Spring和MyBatis的集成,我们将通过一个简单的项目来实践。假设我们需要开发一个简单的用户管理系统,包括用户注册、登录、查询等功能。

6.1.1 创建数据库表

首先,创建一个简单的数据库表用于存储用户信息。执行以下SQL语句:

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL
);
6.1.2 创建MyBatis映射文件

创建一个MyBatis映射文件,用于定义SQL语句和结果映射。

<?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.example.demo.mapper.UserMapper">
    <select id="selectAllUsers" resultType="com.example.demo.model.User">
        SELECT * FROM users
    </select>
    <insert id="insertUser" parameterType="com.example.demo.model.User">
        INSERT INTO users (name, password) VALUES (#{name}, #{password})
    </insert>
</mapper>
6.1.3 创建User实体类

创建一个简单的User实体类,用于映射数据库中的用户表。

public class User {
    private int id;
    private String name;
    private String password;

    // Getter and Setter
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
6.1.4 创建UserMapper接口

创建一个UserMapper接口,定义SQL语句的方法。

import com.example.demo.model.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import java.util.List;

public interface UserMapper {
    @Select("SELECT * FROM users")
    List<User> selectAllUsers();

    @Insert("INSERT INTO users (name, password) VALUES (#{name}, #{password})")
    void insertUser(User user);
}
6.1.5 创建UserService类

创建一个UserService类,用于处理数据库操作。

import com.example.demo.mapper.UserMapper;
import com.example.demo.model.User;
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 java.io.IOException;
import java.util.List;

public class UserService {
    private SqlSessionFactory sqlSessionFactory;

    public UserService() throws IOException {
        String resource = "mybatis-config.xml";
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources
                .getResourceAsStream(resource));
    }

    public List<User> getAllUsers() {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            return mapper.selectAllUsers();
        }
    }

    public void insertUser(User user) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            mapper.insertUser(user);
            session.commit();
        }
    }
}
6.1.6 创建UserController类

创建一个UserController类,用于处理HTTP请求。

import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {
    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @PostMapping
    public void insertUser(@RequestBody User user) {
        userService.insertUser(user);
    }
}
6.1.7 创建Spring Boot启动类

创建一个Spring Boot启动类,用于启动Spring应用。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyBatisSpringApp {
    public static void main(String[] args) {
        SpringApplication.run(MyBatisSpringApp.class, args);
    }
}
6.1.8 运行项目

在IDE中运行Spring Boot启动类,启动Spring应用。打开浏览器,访问http://localhost:8080/users,可以看到输出所有用户的列表。同时,可以通过POST请求向/users发送JSON格式的用户信息,插入新的用户。

6.2 部署与运行项目

部署和运行项目的过程主要包括打包项目、配置服务器环境和启动应用。以下是具体的步骤:

6.2.1 打包项目

使用Maven或Gradle打包项目,生成可执行的JAR文件。在IDE中,可以通过File -> Project Structure -> Artifacts配置打包选项,然后点击Build打包项目。

6.2.2 配置服务器环境

将生成的JAR文件上传到服务器,配置服务器环境,确保服务器已经安装了Java和Tomcat等软件。可以通过scp命令将JAR文件上传到服务器:

scp target/mybatis-spring-app.jar user@server:/path/to/deploy/
6.2.3 启动应用

在服务器上启动应用,可以通过以下命令启动应用:

java -jar /path/to/deploy/mybatis-spring-app.jar

启动应用后,可以通过浏览器访问应用的URL,验证应用是否运行正常。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消