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

Java企业级项目入门:新手必读教程

概述

本文档涵盖了企业级项目的基础知识,介绍了Java在企业级开发中的优势及常用框架,如Spring和MyBatis。文章详细讲解了数据库操作、项目部署与运行,并通过实战案例加深理解。

Java企业级项目简介

什么是企业级项目

企业级项目通常指的是为大型企业或组织开发的应用程序,这些应用程序需要支持大量的用户访问,提供复杂的功能,并满足特定的业务需求。企业级项目通常具有高度的可扩展性、稳定性和安全性,并且需要支持多种数据源和复杂的业务逻辑。

常见的企业级应用

企业级应用主要包括以下几个方面:

  1. 企业资源规划(ERP)系统:用于管理企业的财务、库存、生产、采购、销售等核心业务。
  2. 客户关系管理(CRM)系统:用于管理客户信息,跟踪销售线索,提高客户满意度和忠诚度。
  3. 供应链管理系统:用于优化供应链中的各个环节,提高效率,降低成本。
  4. 人力资源管理系统(HRM):用于管理员工信息,招聘、培训、绩效考核等。
  5. 企业内容管理系统(CMS):用于网站内容的管理和发布,支持多人协作。
  6. 企业级协作平台:支持内部沟通、文档共享、会议安排等。

Java在企业级开发中的优势

Java作为一种广泛使用的编程语言,尤其适合企业级应用开发。以下是Java在企业级开发中的优势:

  1. 跨平台性:Java程序可以在多种操作系统上运行,如Windows、Linux、macOS等,这使得Java程序具有很好的移植性。
  2. 丰富的类库:Java标准库提供了大量的类和接口,可以满足各种开发需求。例如,Java提供了丰富的网络编程、文件处理、数据库连接等功能。
  3. 强大的框架支持:Java拥有众多成熟且强大的框架,如Spring、Hibernate、MyBatis等,这些框架可以简化开发过程,提高开发效率。
  4. 成熟的社区支持:Java拥有庞大的开发者社区,可以提供技术支持、学习资源等。
  5. 安全性:Java提供了多种安全机制,如字节码验证、安全管理器等,可以保护应用程序免受各种安全威胁。
  6. 可扩展性:Java支持面向对象编程,可以方便地进行模块化设计,支持后续的扩展和维护。

必备的Java开发工具

JDK安装与配置

JDK(Java Development Kit)是开发和运行Java程序所必需的软件包。以下是安装和配置JDK的步骤:

  1. 访问Oracle官方网站或第三方下载站下载最新版本的JDK。
  2. 安装JDK时,选择合适的安装路径,可以自定义安装目录。
  3. 安装完成后,配置环境变量。在Windows和Linux中,环境变量配置略有不同。

Windows环境变量配置

  1. 右键点击“计算机”或“此电脑”,选择“属性”。
  2. 点击“高级系统设置”。
  3. 点击“环境变量”。
  4. 在系统变量中新建两个变量:JAVA_HOMEPATH
    • JAVA_HOME: 指向JDK安装目录,例如 C:\Program Files\Java\jdk1.8.0_281
    • PATH: 在现有变量值的末尾添加 ;%JAVA_HOME%\bin
  5. 确认保存后,打开命令行窗口,输入 java -version 来检查JDK是否正确安装。

Linux环境变量配置

  1. 打开终端,编辑环境变量配置文件,例如 ~/.bashrc~/.profile
  2. 在文件末尾添加以下内容:
    export JAVA_HOME=/path/to/jdk
    export PATH=$JAVA_HOME/bin:$PATH
  3. 保存文件后,运行 source ~/.bashrcsource ~/.profile 使设置生效。
  4. 在终端中输入 java -version 验证安装是否成功。

代码示例

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

IDE的选择与使用(如IntelliJ IDEA、Eclipse)

IDE(集成开发环境)是开发Java程序的重要工具,可以提高开发效率。以下是使用IntelliJ IDEA和Eclipse的步骤。

IntelliJ IDEA

  1. 访问官方网站下载最新版本的IntelliJ IDEA。
  2. 解压下载的文件,并运行安装程序。
  3. 创建一个新项目,选择Java。IntelliJ IDEA会自动设置好所需的环境。
  4. 创建一个新的Java文件,例如 HelloWorld.java,并编写代码:
    public class HelloWorld {
       public static void main(String[] args) {
           System.out.println("Hello, World!");
       }
    }
  5. 保存文件后,运行程序,可以通过点击工具栏中的绿色运行按钮或者使用快捷键 Shift + F10

Eclipse

  1. 访问官方网站下载最新版本的Eclipse。
  2. 解压下载的文件,并运行安装程序。
  3. 创建一个新项目,选择Java。Eclipse会自动设置好所需的环境。
  4. 创建一个新的Java文件,例如 HelloWorld.java,并编写代码:
    public class HelloWorld {
       public static void main(String[] args) {
           System.out.println("Hello, World!");
       }
    }
  5. 保存文件后,运行程序,可以通过点击工具栏中的绿色运行按钮或者使用快捷键 Ctrl + F11

版本管理工具(如Git)

版本管理工具如Git可以帮助开发者管理代码版本,提高团队协作效率。以下是使用Git的基本步骤。

  1. 安装Git
    • 访问官方网站下载Git安装程序,并按照提示安装。
  2. 配置Git
    • 在Git Bash中输入 git config --global user.name "Your Name" 设置用户名。
    • 在Git Bash中输入 git config --global user.email "your.email@example.com" 设置邮箱。
  3. 使用Git
    • 初始化仓库:在项目目录中运行 git init
    • 添加文件:运行 git add .git add <filename>
    • 提交文件:运行 git commit -m "Initial commit"
    • 连接远程仓库:运行 git remote add origin <remote_repo_url>
    • 推送代码:运行 git push -u origin main

代码示例

# 初始化仓库
git init

# 添加文件
git add .

# 提交文件
git commit -m "Initial commit"

# 连接远程仓库
git remote add origin https://github.com/username/repo.git

# 推送代码
git push -u origin main

Java企业级开发框架入门

Spring框架简介

Spring 是一个开源的企业级应用程序开发框架,旨在简化Java开发工作,提高开发效率和代码质量。Spring框架具有以下特点:

  • 依赖注入:通过依赖注入使对象之间的依赖关系更加明确。
  • 面向切面编程:通过AOP来增强程序的功能。
  • 企业级应用集成:提供丰富的企业级应用集成支持,如JDBC、JMS等。
  • 事务管理:提供编程式和声明式的方式进行事务管理。
  • Web框架:提供一个非常优秀的Web框架,简化Web开发过程。
  • MVC架构:提供优秀的MVC架构支持,使得Web应用的结构更加清晰。

依赖注入示例

public class UserService {
    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void add(User user) {
        userDao.insert(user);
    }
}

public class UserDao {
    public void insert(User user) {
        // 数据库插入操作
    }
}

Spring Boot快速搭建项目

Spring Boot 是Spring框架的一个子项目,旨在简化Spring应用的开发,通过约定优于配置的思想,让开发人员能够快速搭建可运行的Spring应用。下面是一个简单的Spring Boot项目搭建指南。

  1. 创建Spring Boot项目:

    • 访问Spring Initializr网站(https://start.spring.io/)。
    • 选择项目类型为Maven或Gradle,选择Spring Boot版本。
    • 填写项目信息,如项目名、语言、包名等。
    • 选择需要的依赖,如Spring Web、Spring Data JPA等。
    • 下载压缩包并解压,导入到IDE中。
  2. 编写代码:
    • 创建一个简单的HelloController类,用于处理HTTP请求。
    • 在类中定义请求处理方法,使用@Controller注解。
    • 在方法中返回字符串或对象,使用@ResponseBody注解。

代码示例

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

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot!";
    }
}
  1. 启动应用:
    • 在IDE中运行主类,通常是SpringApplication.run方法所在的类。
    • 打开浏览器,访问http://localhost:8080/hello,查看结果。

MyBatis框架基础

MyBatis 是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis可以极大简化数据库访问层的开发工作,提高开发效率。

  1. 环境配置

    • 引入MyBatis相关依赖,如MyBatis核心库、数据库驱动等。
    • 编写配置文件,定义数据源、映射文件等信息。
  2. 编写映射文件
    • 创建XML映射文件,通常命名为UserMapper.xml,并定义SQL语句和对应的结果映射。

代码示例

<mapper namespace="com.example.demo.mapper.UserMapper">
    <select id="selectUserById" resultType="com.example.demo.entity.User">
        SELECT id, name, email FROM users WHERE id = #{id}
    </select>
</mapper>
  1. 编写Java接口
    • 创建一个接口,对应XML映射文件中的namespace。
    • 在接口中定义方法,对应映射文件中的SQL语句。

代码示例

package com.example.demo.mapper;

import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Select;

public interface UserMapper {
    @Select("SELECT id, name, email FROM users WHERE id = #{id}")
    User selectUserById(int id);
}
  1. 使用Mapper接口
    • 在业务层代码中注入Mapper接口,并调用方法。

代码示例

import com.example.demo.mapper.UserMapper;
import com.example.demo.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public User findUserById(int id) {
        return userMapper.selectUserById(id);
    }
}

Hibernate示例

  1. 配置Hibernate

    • 编写hibernate.cfg.xml配置文件,配置数据源、方言等信息。
    • 编写实体类,使用@Entity注解标注。
  2. 创建会话对象

    • 使用SessionFactory创建Session对象。
  3. 执行操作
    • 使用Session对象执行CRUD操作。

实体类示例

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

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

    // getters and setters
}

示例代码

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.Transaction;

public class HibernateExample {
    public static void main(String[] args) {
        SessionFactory sessionFactory = new Configuration()
                .configure("hibernate.cfg.xml")
                .addAnnotatedClass(User.class)
                .buildSessionFactory();

        Session session = sessionFactory.openSession();
        Transaction tx = null;

        try {
            tx = session.beginTransaction();
            User user = new User(1, "John", "john@example.com");
            session.save(user);
            tx.commit();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            e.printStackTrace();
        } finally {
            session.close();
            sessionFactory.close();
        }
    }
}

数据库与持久层开发

数据库基础

数据库管理系统(DBMS)是用于管理和存储数据的软件,常见的数据库管理系统包括关系型数据库如MySQL、Oracle、PostgreSQL等,以及NoSQL数据库如MongoDB、Redis等。在企业级应用中,关系型数据库使用最为广泛。

关系型数据库基本概念

  • :数据库中的基本存储单元,用于存储数据。
  • 字段:表中的一列,用于存储单个数据项。
  • 记录:表中的一行,用于存储一组数据项。
  • 索引:用于加速数据检索的结构。
  • 约束:用于确保数据的完整性和一致性,如主键、外键、唯一性约束等。

创建数据库和表

CREATE DATABASE mydatabase;

USE mydatabase;

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100),
    email VARCHAR(100)
);

JDBC操作数据库

JDBC(Java Database Connectivity)是Java访问数据库的标准API,可以连接到各种数据库系统并执行SQL语句。下面是使用JDBC操作数据库的基本步骤。

  1. 加载驱动:使用Class.forName加载数据库驱动。
  2. 获取连接:使用DriverManager.getConnection获取数据库连接。
  3. 执行SQL语句:创建StatementPreparedStatement对象,执行SQL语句。
  4. 处理结果集:如果SQL语句返回了结果集,使用ResultSet对象处理结果。
  5. 释放资源:关闭ResultSetStatementConnection

代码示例

import java.sql.*;

public class JdbcExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        try {
            // 1. 加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2. 获取连接
            Connection conn = DriverManager.getConnection(url, username, password);

            // 3. 创建Statement
            Statement stmt = conn.createStatement();

            // 4. 执行SQL语句
            String sql = "INSERT INTO users(name, email) VALUES ('John', 'john@example.com')";
            int rows = stmt.executeUpdate(sql);

            // 5. 处理结果集
            if (rows > 0) {
                System.out.println("数据插入成功");
            }

            // 6. 释放资源
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用ORM框架操作数据库

ORM(Object-Relational Mapping)是一种将对象模型映射到关系数据库的技术,常用的ORM框架有Hibernate、MyBatis等。ORM框架可以提高开发效率,简化数据访问操作。

Hibernate示例

  1. 配置Hibernate

    • 编写hibernate.cfg.xml配置文件,配置数据源、方言等信息。
    • 编写实体类,使用@Entity注解标注。
  2. 创建会话对象

    • 使用SessionFactory创建Session对象。
  3. 执行操作
    • 使用Session对象执行CRUD操作。

实体类示例

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

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

    // getters and setters
}

示例代码

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.Transaction;

public class HibernateExample {
    public static void main(String[] args) {
        SessionFactory sessionFactory = new Configuration()
                .configure("hibernate.cfg.xml")
                .addAnnotatedClass(User.class)
                .buildSessionFactory();

        Session session = sessionFactory.openSession();
        Transaction tx = null;

        try {
            tx = session.beginTransaction();
            User user = new User(1, "John", "john@example.com");
            session.save(user);
            tx.commit();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            e.printStackTrace();
        } finally {
            session.close();
            sessionFactory.close();
        }
    }
}

MyBatis示例

  1. 配置MyBatis

    • 编写MyBatis配置文件(如mybatis-config.xml),配置数据源、映射文件等。
    • 编写映射文件,定义SQL语句和映射关系。
  2. 创建SqlSessionFactory

    • 使用SqlSessionFactoryBuilder创建SqlSessionFactory对象。
  3. 获取SqlSession

    • 使用SqlSessionFactory获取SqlSession对象。
  4. 执行操作
    • 使用SqlSession对象执行CRUD操作。

实体类示例

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

    // getters and setters
}

示例代码

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.io.Reader;

public class MyBatisExample {
    public static void main(String[] args) throws IOException {
        // 1. 加载配置文件
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");

        // 2. 创建SqlSessionFactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);

        // 3. 获取SqlSession
        SqlSession session = factory.openSession();

        // 4. 执行操作
        UserMapper mapper = session.getMapper(UserMapper.class);
        User user = new User(1, "John", "john@example.com");
        mapper.insertUser(user);

        // 5. 提交事务
        session.commit();

        // 6. 释放资源
        session.close();
    }
}

项目部署与运行

项目打包与发布

项目打包是将开发完成的代码转换为可执行的文件格式,以便部署到生产环境。Java项目常用的打包工具是Maven和Gradle。

  1. Maven打包

    • 在项目的pom.xml文件中指定打包方式,如<packaging>jar</packaging>
    • 在命令行中运行mvn clean package
    • Maven会将项目编译、测试并打包成.jar文件。
  2. Gradle打包
    • 在项目的build.gradle文件中指定打包方式,如jar
    • 在命令行中运行gradle build
    • Gradle会将项目编译、测试并打包成.jar文件。

代码示例

<!-- Maven pom.xml -->
<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.example</groupId>
    <artifactId>example</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>
</project>
// Gradle build.gradle
apply plugin: 'java'
apply plugin: 'eclipse'

jar {
    manifest {
        attributes 'Main-Class': 'com.example.MainClass'
    }
}

容器的选择与使用(如Tomcat、Jetty)

容器是运行Java Web应用的环境,常见的Java Web应用容器有Tomcat、Jetty等。Tomcat是一个开源的Servlet容器,而Jetty则是轻量级的Java HTTP服务器和Servlet容器。

Tomcat

  1. 安装Tomcat
    • 下载Tomcat安装包并解压。
    • 设置环境变量CATALINA_HOME指向Tomcat安装目录。
  2. 部署应用
    • 将打包好的WAR文件复制到Tomcat的webapps目录下。
    • 启动Tomcat服务器,访问http://localhost:8080/yourapp

Jetty

  1. 安装Jetty
    • 下载Jetty安装包并解压。
    • 将Jetty的lib目录添加到CLASSPATH环境变量中。
  2. 部署应用
    • 在命令行中运行java -jar start.jar启动Jetty服务器。
    • 将打包好的WAR文件放入Jetty的webapps目录下。
    • 访问http://localhost:8080/yourapp

代码示例

# 启动Tomcat
cd /path/to/tomcat
./bin/startup.sh

# 启动Jetty
java -jar /path/to/jetty/start.jar

项目监控与调试

项目监控和调试是在生产环境中确保应用稳定运行的重要手段。常用的工具包括JVM监控工具、日志分析工具等。

JVM监控工具

  • JVisualVM:提供可视化的JVM监控和分析工具。
  • JMX(Java Management Extensions):提供标准的管理和监控接口。
  • JProfiler:强大的性能分析和调试工具。

日志分析工具

  • Logback:基于日志框架SLF4J的日志实现。
  • Log4j:广泛使用的日志框架。
  • ELK(Elasticsearch、Logstash、Kibana):用于日志收集、分析和可视化。

代码示例

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogExample {
    private static final Logger logger = LoggerFactory.getLogger(LogExample.class);

    public void logMessage() {
        logger.info("This is an info message");
        logger.error("This is an error message");
    }
}
<!-- Logback配置 -->
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

实战案例:简易企业级应用

实战项目需求分析

假设我们要开发一个简单的在线图书管理系统,该系统包括以下几个功能:

  1. 图书管理:添加、修改、删除图书信息。
  2. 用户管理:注册、登录、查看个人信息。
  3. 借阅管理:用户可以借阅图书,管理员可以管理借阅记录。

项目设计与开发

架构设计

  • 前端:使用HTML、CSS、JavaScript实现Web界面。
  • 后端:使用Spring Boot框架实现业务逻辑。
  • 数据库:使用MySQL存储图书、用户、借阅记录等数据。

数据库设计

  • 图书表(books):存储图书信息,包括ID、标题、作者等字段。
  • 用户表(users):存储用户信息,包括ID、用户名、密码等字段。
  • 借阅表(borrows):存储借阅记录,包括ID、图书ID、用户ID等字段。

代码示例

CREATE TABLE books (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(100),
    author VARCHAR(100)
);

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(100),
    password VARCHAR(100)
);

CREATE TABLE borrows (
    id INT PRIMARY KEY AUTO_INCREMENT,
    book_id INT,
    user_id INT,
    borrow_date DATE,
    return_date DATE,
    FOREIGN KEY (book_id) REFERENCES books(id),
    FOREIGN KEY (user_id) REFERENCES users(id)
);

后端实现

  • 图书实体类

    
    public class Book {
      private int id;
      private String title;
      private String author;
    
      // getters and setters
    }
    ``
  • 用户实体类

    
    public class User {
      private int id;
      private String username;
      private String password;
    
      // getters and setters
    }
    ``
  • 借阅记录实体类

    
    public class Borrow {
      private int id;
      private int bookId;
      private int userId;
      private Date borrowDate;
      private Date returnDate;
    
      // getters and setters
    }
    ``
  • 图书服务类

    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class BookService {
      @Autowired
      private BookMapper bookMapper;
    
      public void addBook(Book book) {
          bookMapper.insertBook(book);
      }
    }
    ``
  • 用户服务类

    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserService {
      @Autowired
      private UserMapper userMapper;
    
      public void registerUser(User user) {
          userMapper.insertUser(user);
      }
    }
    ``
  • 借阅服务类

    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class BorrowService {
      @Autowired
      private BorrowMapper borrowMapper;
    
      public void borrowBook(int bookId, int userId) {
          Borrow borrow = new Borrow();
          borrow.setBookId(bookId);
          borrow.setUserId(userId);
          borrow.setBorrowDate(new Date());
          borrow.setReturnDate(null);
          borrowMapper.insertBorrow(borrow);
      }
    }
    ``

项目测试与部署

测试

测试是确保代码质量的重要环节,通常使用单元测试和集成测试。

  • 单元测试:使用JUnit进行单元测试,测试每个类的方法。
  • 集成测试:使用Mockito进行集成测试,测试整个应用的功能。

单元测试示例

import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class BookServiceTest {
    @Mock
    private BookMapper bookMapper;

    @InjectMocks
    private BookService bookService;

    @Test
    public void testAddBook() {
        Book book = new Book(1, "Title", "Author");
        Mockito.when(bookMapper.insertBook(book)).thenReturn(1);

        bookService.addBook(book);

        Mockito.verify(bookMapper).insertBook(book);
    }
}

部署

部署是指将开发好的应用发布到生产环境,包括打包、配置、启动等步骤。

  • 打包:使用Maven或Gradle将应用打包成WAR或JAR文件。
  • 配置:配置应用服务器(如Tomcat或Jetty)的环境变量、端口等。
  • 启动:启动应用服务器,确保应用正常运行。

代码示例


# Maven打包
mvn clean package

# 部署到Tomcat
cp target/example.war /path/to/tomcat/webapps/
``
点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消