SpringBootWebProject学习——通用项目搭建(后面的项目均采用此项目进行添加内容)

简介: SpringBootWebProject学习——通用项目搭建(后面的项目均采用此项目进行添加内容)

前言

距离本学期结束就要去实习的时间已经很短了,那么在这里我帮助大家完整的回忆一下SpringBoot的完整操作,为了更加直接体现完整的过程我会使用层叠法来完成这个系列文章,会从最新版本idea社区版本的下载开始,直至我们代码开发的整个阶段,可以将接口完全搞出来,跨域后让前端的项目可以解析,完成整个开发的闭环操作,准备工作的孩子们可以持续的跟着看看,应该会给你提供比较大的帮助。

声明:由于刚毕业的还比不可能上来就上大的微服务架构,所以这里不提供springcloud内容,当然我会在下一个系列中将本次学到的整个springboot融入到springcloud中。

系统与开发环境

系统:Windows 11 家庭中文版

idea:官网2024年1月最新社区版本:ideaIC-2024.1

数据库:阿里云RDS for MySQL 5.7

基础idea环境搭建


基础maven配置(外部独立maven)


基础maven默认配置(默认maven)



SpringBootWebProject学习——正文

我这里还是使用英文的版本了,这个用的多,更方便大家熟悉。

项目创建

创建的是maven项目,maven配置在上面的链接中可以看到,使用默认的和外部引入的都可以。

另外这里使用的JDK是1.8的,毕竟这个是稳定版本,各种运行都不会出现版本异常的问题。

修改maven配置

我这里用的是外部的maven配置,镜像用的还是阿里的。

更换pom.xml配置

这里我给了完整的pom.xml配置,里面包含了mybatis、swagger、json、junit等内容,后面用这就方便了,更换完毕后一定刷新maven。

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>SrpingBootWebDemo1</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>APIDemos Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <!-- 引入2.3.4的spring-boot -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
 
        <!-- 阻断器·打包的是否排除内置的tomcat -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>
 
        <!--okhttp3 依赖-->
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.9.3</version>
        </dependency>
        <!-- 原项目 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.1.15</version>
        </dependency>
        <!-- swagger包这里2.9.2 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- 用作字符串非空判断 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>
 
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!-- 热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <!-- Web支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- JDBC -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!-- MySQL驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!-- 集成MyBatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>
        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 测试 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.vaadin.external.google</groupId>
            <artifactId>android-json</artifactId>
            <version>0.0.20131108.vaadin1</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>APIDemos</finalName>
    </build>
</project>

更新maven

添加各层关系

  1. com.item.controller控制层
  2. com.item.dao数据接口层
  3. com.item.model模型层
  4. com.item.service业务逻辑接口层
  5. com.item.serviceimpl业务逻辑实现层
  6. com.item.swagger接口文档swagger配置
  7. com.item放置Action启动类
  8. resources.mapper数据xml实现层

我这里都先放置了一个类文件,写的名字都是Object,后面用起来直接改名字就行,也方便。

com.item下启动文件Action代码

package com.item;
 
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
 
@MapperScan("com.item.dao")
@SpringBootApplication
public class Action extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Action.class);
    }
 
    public static void main(String[] args) {
        //一定是被@SpringBootApplication标记的类
        SpringApplication.run(Action.class, args);
    }
}

controller层ObjectController类

package com.item.controller;
 
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RestController;
 
@Api("接口声明")
@RestController
@CrossOrigin
public class ObjectController {
}

dao层ObjectMapper类

package com.item.dao;
 
import org.springframework.stereotype.Repository;
 
@Repository
public interface ObjectMapper {
}

model层Object类

package com.item.model;
 
public class Object {
}

service层ObjectService类

package com.item.service;
 
 
public interface ObjectService {
}

serviceimpl层ObjectServiceImpl类

package com.item.serviceimpl;
import com.item.service.ObjectService;
import org.springframework.stereotype.Service;
 
@Service
public class ObjectServiceImpl implements ObjectService {
}

swagger层SwaggerConfig类

package com.item.swagger;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
@Configuration
@EnableSwagger2
public class SwaggerConfig {
    private static Logger log = LoggerFactory.getLogger(SwaggerConfig.class);
    @Bean
    public Docket createRestApi() {
        log.info("进入到swagger的配置中");
        return new Docket(DocumentationType.SWAGGER_2)
                // 指定构建api文档的详细信息的方法:apiInfo()
                .apiInfo(apiInfo())
                .groupName("红目香薰·为毕业答辩孩子准备的Java项目")
                .select()
                // 指定要生成api接口的包路径,这里把controller作为包路径,生成controller中的所有接口
                .apis(RequestHandlerSelectors.basePackage("com.item.controller"))
                .paths(PathSelectors.any())
                .build();
    }
 
    /**
     * 构建api文档的详细信息
     * @return
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                // 设置页面标题
                .title("Spring Boot集成Swagger2接口总览")
                // 设置接口描述
                .description("Swagger接口")
                // 设置联系方式
                .contact(new Contact("测试swagger","https://laoshifu.blog.csdn.net/",""))
                // 设置版本
                .version("1.0")
                // 构建
                .build();
    }
 
}

dao实现层mapper文件基本代码

<?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">
<!-- 适当更改dao层对应的文件名称 -->
<mapper namespace="com.com.item.dao.ObjectMapper">
</mapper>

注:所有必须的注释内容都我放在对应的代码中了,无需额外配置,让你肯定能运行得起来。

配置文件

配置文件放在【resources】的根目录下。

配置代码

注意提换【your info】,最后一个server.servlet.context-path是服务器的路径,访问的时候会用到例如:【http://127.0.0.1:8088/MyAPI/】这是基础服务路径,后面加上对应的controller路径即可。

# driver
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# database
spring.datasource.url=jdbc:mysql://【your database url】:3306/test?characterEncoding=utf8
# userName
spring.datasource.username=your userName
# pwd
spring.datasource.password=your pwd
# xml_url
mybatis.mapper-locations=classpath:mapper/*.xml
# model
mybatis.typeAliasesPackage=com.item.model
# port
server.port=8088
# projectPath
server.servlet.context-path=/MyAPI

至此,项目基础框架配置完毕,后续只需要对应的修改或增添代码即可。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
JSON 前端开发 JavaScript
layui介绍及入门基础(看我这篇就会了!!!)
layui介绍及入门基础(看我这篇就会了!!!)
653 0
|
前端开发 JavaScript Java
Layui之入门
Layui之入门
382 0
|
3月前
|
负载均衡 监控 Java
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
本文详细介绍了 Spring Cloud Gateway 的核心功能与实践配置。首先讲解了网关模块的创建流程,包括依赖引入(gateway、nacos 服务发现、负载均衡)、端口与服务发现配置,以及路由规则的设置(需注意路径前缀重复与优先级 order)。接着深入解析路由断言,涵盖 After、Before、Path 等 12 种内置断言的参数、作用及配置示例,并说明了自定义断言的实现方法。随后重点阐述过滤器机制,区分路由过滤器(如 AddRequestHeader、RewritePath、RequestRateLimiter 等)与全局过滤器的作用范围与配置方式,提
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
|
4月前
|
安全 Java 数据库连接
2025 年最新 Java 学习路线图含实操指南助你高效入门 Java 编程掌握核心技能
2025年最新Java学习路线图,涵盖基础环境搭建、核心特性(如密封类、虚拟线程)、模块化开发、响应式编程、主流框架(Spring Boot 3、Spring Security 6)、数据库操作(JPA + Hibernate 6)及微服务实战,助你掌握企业级开发技能。
637 3
|
jenkins Java 持续交付
实战:Docker+Jenkins+Gitee构建CICD流水线
实战:Docker+Jenkins+Gitee构建CICD流水线
|
前端开发 Java 微服务
Spring Boot与微前端架构的集成开发
Spring Boot与微前端架构的集成开发
深入理解Spring Boot中的配置加载顺序
深入理解Spring Boot中的配置加载顺序
|
Java API Maven
使用 Smart-doc 记录 Spring REST API
使用 Smart-doc 记录 Spring REST API
374 0
|
JavaScript 前端开发 搜索推荐
ECharts词云图(案例一)+配置项详解
ECharts,百度的JavaScript图表库,支持词云图(自5.0版起),借助`echarts-wordcloud`插件。配置词云图涉及`tooltip`(如显示、颜色、边框等)和`series`(类型、形状、大小范围等)。示例代码展示了如何在HTML中引入依赖并配置词云图,包括数据、形状、大小、颜色等。完整代码和依赖可下载。调整这些配置可创建个性化词云图。参阅官方文档获取不同版本详情。
4808 4
 ECharts词云图(案例一)+配置项详解
|
前端开发 JavaScript Java
SpringBoot 生成接口文档,老鸟也被打脸了!(文末福利)
SpringBoot 生成接口文档,老鸟也被打脸了!(文末福利)
1355 2