1. SSM环境搭建回顾
配套视频:【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili
【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili
-
spring
-
springmvc
-
mybatis
-
spring springmvc mybatis 简单功能 员工添加 查询 所有
# 项目
- 需求分析 概要设计(库表设计) 详细设计(验证库表正确性) 编码(环境搭建+业务代码) 测试 部署上线
# 员工添加 查询所有功能 SSM
- 库表 库: ssm 数据库:mysql 表: id name birthday salary
drop database if exists ssm;
create database if not exists ssm;
use ssm;
drop table if exists emp;
create table if not exists emp(
id int(11) not null primary key auto_increment,
name varchar(40),
birthday timestamp,
salary double(10,2)
)engine=innodb default charset=utf8mb4;
# 编码 环境搭建新建Maven-webapp项目 ssm:spring springmvc 一个团队开发 无缝整合
- springmvc spring mybatis
1.1 pom.xml引入依赖
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!--spring--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.3.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>5.3.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>5.3.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.3.6</version> </dependency> <!-- springmvc--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.6</version> </dependency> <!--druid--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.4</version> </dependency> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <!-- mybatis-spring--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.6</version> </dependency> <!-- jackson 转换json--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.3</version> </dependency> <!-- aspectj aop切面 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.5</version> </dependency> <!--aspectj--> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.9.5</version> </dependency>
注意:spring相关依赖要保证版本号一致
1.2 编写spring.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:tx="http://www.springframework.org/schema/tx" 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 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!--开启注解扫描--> <context:component-scan base-package="com.baizhi.service"/> <!--创建数据源--> <bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/ssm?characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean> <!--创建sqlSessionFactory--> <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory"> <property name="dataSource" ref="dataSource"/> <!--mapper配置文件位置--> <property name="mapperLocations" value="classpath:com/baizhi/mapper/*.xml"/> <!--实体别名 类名或类名小写均可 --> <property name="typeAliasesPackage" value="com.baizhi.entity"/> </bean> <!--创建DAO--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <property name="basePackage" value="com.baizhi.dao"/> </bean> <!--创建事务管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!--开启注解事务生效 @Transactional--> <tx:annotation-driven transaction-manager="transactionManager"/> </beans>
1.3 开发实体类
package com.baizhi.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
public class Emp {
private Integer id;
private String name;
@JsonFormat(pattern = "yyyy-MM-dd")//json格式日期转换,只对日期生效
private Date birthday;
private Double salary;
public Emp() {
}
public Emp(Integer id, String name, Date birthday, Double salary) {
this.id = id;
this.name = name;
this.birthday = birthday;
this.salary = salary;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Emp{" +
"id=" + id +
", name='" + name + '\'' +
", birthday=" + birthday +
", salary=" + salary +
'}';
}
}
1.4 开发DAO组件
package com.baizhi.dao;
import com.baizhi.entity.Emp;
import java.util.List;
public interface EmpDAO {
//保存
void save(Emp emp);
//查询所有
List<Emp> findAll();
}
1.5 开发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">
<mapper namespace="com.baizhi.dao.EmpDAO">
<!--保存
useGeneratedKeys="true" keyProperty="id"仅对mysql数据库有效,
可进行主键自增,插入数据时直接插入null值即可
-->
<insert id="save" parameterType="Emp" useGeneratedKeys="true" keyProperty="id">
insert into emp
values (#{id}, #{name}, #{birthday}, #{salary})
</insert>
<!--查询所有-->
<select id="findAll" resultType="Emp">
select id,name,birthday,salary from emp
</select>
</mapper>
1.6 开发Service组件
package com.baizhi.service;
import com.baizhi.entity.Emp;
import java.util.List;
public interface EmpService {
void save(Emp emp);
List<Emp> findAll();
}
1.7 编写Service实现类
package com.baizhi.service;
import com.baizhi.dao.EmpDAO;
import com.baizhi.entity.Emp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service("empService")
@Transactional
public class EmpServiceImpl implements EmpService{
private EmpDAO empDAO;
//推荐构造注入
@Autowired
public EmpServiceImpl(EmpDAO empDAO) {
this.empDAO = empDAO;
}
@Override
public void save(Emp emp) {
empDAO.save(emp);
}
@Override
public List<Emp> findAll() {
return empDAO.findAll();
}
}
1.8 测试Service组件
package com.baizhi.test;
import com.baizhi.entity.Emp;
import com.baizhi.service.EmpService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.Date;
public class TestEmpServiceImpl {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
EmpService empService = (EmpService) context.getBean("empService");
empService.save(new Emp(null,"皮卡丘",new Date(),123.456));
empService.findAll().forEach(emp -> System.out.println("emp = " + emp));
//输出结果:emp = Emp{id=1, name='皮卡丘', birthday=Wed Apr 27 16:53:24 CST 2022, salary=123.46}
}
}
1.9 编写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: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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--开启注解扫描--> <context:component-scan base-package="com.baizhi.controller"/> <!--开启mvc注解驱动--> <mvc:annotation-driven/> <!--配置视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
1.10 配置web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <!-- 加载spring.xml--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring.xml</param-value> </context-param> <!-- 配置spring工厂启动--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 配置springmvc--> <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:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
1.11 开发Controller组件
package com.baizhi.controller;
import com.baizhi.entity.Emp;
import com.baizhi.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController //使用此注解可将类中返回值转为json响应到浏览器
@RequestMapping("emp")
public class EmpController {
private EmpService empService;
//推荐构造注入
@Autowired
public EmpController(EmpService empService) {
this.empService = empService;
}
//保存
@RequestMapping("save")
public void save(Emp emp){
empService.save(emp);
}
//查询所有
@RequestMapping("findAll")
public List<Emp> findAll(){
return empService.findAll();
}
}
1.12 部署tomcat服务器进行测试
测试插入数据:
访问地址:http://localhost:8888/ssm/emp/save?name=猪猪侠&birthday=2020/12/12&salary=234.567
测试查询数据:
1.13 现有SSM开发存在问题
-
大量maven冗余配置
-
每次构建项目都要书写大量相同配置极大浪费了项目开发时间
-
每次整合第三方技术都需要编写相关配置文件
-
项目测试每次都需要部署到tomcat
注意:这就是早期的SSM或者SSH开发存在问题,是不是很麻烦☹️☹️☹️
2. SpringBoot的引言
配套视频:【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
Spring Boot 全新框架作用:简化spring应用初始搭建和开发过程
如何简化:开发人员使用springboot只要基于特定方式进行配置,简化spring使用
SpringBoot 微框架: 5分钟完成之前ssm中环境
springboot(微框架) = springmvc(控制器) + spring core(项目管理)
3. SpringBoot的优势
(1)创建完整的独立的Spring应用程序:使spring、springmvc只有一个容器
(2)内部嵌入了Tomcat,无需部署WAR文件:springboot内嵌tomcat,应用跑在内嵌服务器
(3)简化Maven配置,自动配置Spring、Springmvc,没有XML配置:只需要额外引入少数几个依赖
“用了springboot,spring应用再无xml”
4. SpringBoot的约定


总结:

-
springboot项目中必须在src/main/resources中放入application.yml(.properties)核心配置文件,且名字必须为:application
-
springboot项目中必须在src/main/java中所有子包之外构建全局入口类型:xxApplication,入口类一个springboot项目只能有一个
5. SpringBoot环境搭建
配套视频:【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili
SpringBoot官网:Spring Boot

新建项目时只需要建立普通的maven项目即可,不需要勾选任何选项:


新建后的项目结构如下,需要额外引入src/test/resources目录:

5.1 环境要求
# 1.System Requirements JDK 1.8+ MAVEN 3.2+ Spring Framework 5.x+ 即SpringBoot 2.5.0以上 # 2.ServletContainers: Tomcat 9.0+ # 3.开发工具 IDEA 2021版本
5.2 新建项目中引入依赖
<!-- 继承springboot的父项目,便于维护版本 2.3之前版本:2.3.x.RELEASE 2.4之后版本:2.4.x 去掉了RELEASE,改为纯数字表示 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.0</version> </parent> <!--引入依赖--> <dependencies> <!--引入springboot的web支持spring-boot-starter-web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
5.3 resources目录下引入application.yml配置文件
# 公共配置
server:
port: 8888 # 修改内嵌服务器端口号
servlet:
context-path: /springboot01 # 修改项目名 注意项目名必须以“/”开头
5.4 编写入口类,启动项目
//在项目中如下的包结构中创建入口类 Application
/*
com
+| study
*/
package com.study;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @ClassName SpringBoot01Application
* @Description TODO
* @Author Jiangnan Cui
* @Date 2022/4/28 11:27
* @Version 1.0
*/
/**
* @SpringBootApplication注解
* 修饰范围:只能用在入口类上,且只能出现一次
* 作用:标识这个类是一个springboot的入口类,是启动整个springboot项目的总入口
* springboot项目创建步骤总结:
* 1.pom.xml文件引入依赖
* 2.resources目录下生成application.yml
* 3.创建入口类加入@SpringBootApplication注解,在main中启动应用
*/
@SpringBootApplication
public class SpringBoot01Application {
public static void main(String[] args) {
/**
* 启动springboot应用
* 参数1:指定入口类的类对象(.class),注意不是类的对象
* 参数2:main函数参数
* 注意:默认端口是8080,如果端口被占用,需要在application.yml中重新指定端口,否则不能正常启动项目
*/
SpringApplication.run(SpringBoot01Application.class,args);
}
}
// springboot = springmvc(控制器controller) + spring(工厂)
/**
* @SpringBootApplication: 注解
* 组合注解: 就是由多个注解组合而成一个注解
* 元注解 : 用来修饰注解的注解,如:@Target、@Retention、@Documented、@Inherited
* @Target: 指定注解作用范围
* @Retention: 指定注解什么时候有效
* 包含下面三个注解:
* @SpringBootConfiguration:
* 这个注解就是用来自动配置spring、springmvc(初始化servlet ...)相关环境
*
* @EnableAutoConfiguration: 开启自动配置
* 自动配置核心注解 自动配置spring相关环境 自动与项目中引入的第三方技术自动配置其环境
* mybatis-springboot、redis-springboot 、es-springboot 、rabbitmq 第三方技术
*
* @ComponentScan: 组件扫描
* 根据注解发挥注解作用,默认扫描当前包及其子包
*
* 启动springboot应用时候需要传递main函数参数作为启动的第二个参数:
* 主要用途是测试用,项目启动后动态传参,传递JVM相关的一些参数
*
* 外部部署时打包成jar包:java -jar --spring.config.location=绝对路径 xxx.jar
*
*/
运行main启动项目:
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.5.0) 2022-04-28 11:29:21.768 INFO 10908 --- [ main] com.study.SpringBoot01Application : Starting SpringBoot01Application using Java 1.8.0_131 on cjn-PC with PID 10908 (D:\Software_Development\IDEA_code\SpringBoot\springboot01\target\classes started by cjn in D:\Software_Development\IDEA_code\SpringBoot\springboot01) 2022-04-28 11:29:21.775 INFO 10908 --- [ main] com.study.SpringBoot01Application : No active profile set, falling back to default profiles: default 2022-04-28 11:29:22.628 INFO 10908 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8888 (http) 2022-04-28 11:29:22.642 INFO 10908 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2022-04-28 11:29:22.642 INFO 10908 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.46] 2022-04-28 11:29:22.716 INFO 10908 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2022-04-28 11:29:22.716 INFO 10908 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 895 ms 2022-04-28 11:29:23.044 INFO 10908 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8888 (http) with context path '' 2022-04-28 11:29:23.053 INFO 10908 --- [ main] com.study.SpringBoot01Application : Started SpringBoot01Application in 1.805 seconds (JVM running for 3.3) 2022-04-28 11:29:23.054 INFO 10908 --- [ main] o.s.b.a.ApplicationAvailabilityBean : Application availability state LivenessState changed to CORRECT 2022-04-28 11:29:23.056 INFO 10908 --- [ main] o.s.b.a.ApplicationAvailabilityBean : Application availability state ReadinessState changed to ACCEPTING_TRAFFIC //说明: 出现以上日志说明启动成功
注意:到这里项目环境已经搭建成功了,看看仅仅需要5分钟😄😁😁
5.5 创建控制器并测试
//在项目中创建指定的包结构
/*
com
+| study
+| controller */
@Controller
package com.study.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @ClassName HelloController
* @Description TODO
* @Author Jiangnan Cui
* @Date 2022/4/28 12:31
* @Version 1.0
*/
@RestController
@RequestMapping("hello")
public class HelloController {
/**
* @MethodName test
* @Description 测试控制器
* 访问地址:http://localhost:端口号/项目名/请求路径
* 注意:springboot项目默认启动没有项目名,例如:http://localhost:8888/hello/test
* 需要指定项目名时,要在application.yml里面进行配置
* @return: java.lang.String
* @Author Jiangnan Cui
* @Date 2022/4/28 12:32
*/
@RequestMapping("test")
public String test(){
System.out.println("hello springboot!");
return "Hello SpringBoot!";
}
}
启动项目进行测试控制器:
# 注意: springboot的项目启动默认无项目名,此处指定了项目名 - 访问路径: http://localhost:8888/springboot01/hello/test # 注意: springboot的项目启动默认无项目名 - 访问路径: http://localhost:8888/hello/test
测试结果:
(1)配置项目名

(2)不配置项目名

与此同时,控制台输出:hello springboot!
6. 相关注解说明
配套视频:【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili
# springboot = springmvc(控制器controller) + spring(工厂)
# 入口类 SpringApplication
- SpringBootApplication: 全局入口类 有且只能有一个
# @SpringBootApplication: 注解
组合注解: 就是由多个注解组合而成一个注解
元注解 : 用来修饰注解的注解,如:@Target、@Retention、@Documented、@Inherited
@Target: 指定注解作用范围
@Retention: 指定注解什么时候有效
包含下面三个注解:
# @SpringBootConfiguration:
这个注解就是用来自动配置spring、springmvc(初始化servlet ...)相关环境
# @EnableAutoConfiguration: 开启自动配置
自动配置核心注解 自动配置spring相关环境 自动与项目中引入的第三方技术自动配置其环境
mybatis-springboot、redis-springboot 、es-springboot 、rabbitmq 第三方技术
# @ComponentScan: 组件扫描
根据注解发挥注解作用,默认扫描当前包及其子包
# 注意启动springboot应用时候需要传递main函数参数作为启动的第二个参数,它的主要作用是:
测试用,项目启动后动态传参,在启动时指定jvm参数覆盖默认配置
7. 配置文件
配套视频:【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili
7.1 配置文件的拆分
说明:在实际开发过程中生产环境和测试环境有可能是不一样的,因此将生产中的配置和测试中的配置拆分开是非常必要的,在springboot中也提供了配置文件拆分的方式。

这里以生产中项名名称不一致为例:
-
生产中项目名为: springboot_prod
-
测试中项目名为: springboot_dev
-
端口同时为: 8888(也可设置不同)
# 主配置文件 application.yml:用来书写相同的的配置
# 公共配置
server:
port: 8888 # 修改内嵌服务器端口号
# servlet:
# context-path: /springboot01 # 修改项目名 注意项目名必须以“/”开头
# 激活环境配置,指定哪个环境配置生效(此处写配置文件名的简写)
spring:
profiles:
# active: prod # 让prod生效
active: dev # 让dev生效
# 生产配置文件 application-pord.yml,其中prod为生产配置文件简名
server:
servlet:
context-path: /springboot_prod
# 测试配置文件 application-dev.yml,其中dev为测试配置文件简名
server:
servlet:
context-path: /springboot_dev

启动项目后测试:
控制台同时输出hello springboot!
7.2 启动指定配置文件
说明:往往在企业级开发过程中为SpringBoot应用启动时指定一个完整外部配置也是经常用到的,在SpringBoot中也提供这个方式来启动项目,如下所示:

application_local_prod.yml配置文件代码:
# 公共配置
server:
port: 9999 # 修改内嵌服务器端口号
servlet:
context-path: /springboot_local_prod
需要额外进行配置:
Program arguments:需要指定绝对路径
例如:
--spring.config.location=D:\Software_Development\IDEA_code\SpringBoot\springboot01\application-local-prod.yml
复制application_local_prod.yml路径方法:选中文件---右键---Copy---Absolute Path
外部部署时打包成jar包:java -jar --spring.config.location=绝对路径 xxx.jar
启动项目后测试:
控制台同时输出hello springboot!
8. 创建项目的两种方式
配套视频:【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili
8.1 方式一:基于maven
File---New---Module---Maven---可以不选任何骨架 / 可以勾选maven-archetype-quickstart / 可以勾选maven-archetype-webapp,完成项目创建后需要额外添加test目录下的resources目录。


8.2 方式二:基于Spring Initializr快速初始化(推荐)
File---New---Module---Spring Initializr---选择SDK和starter service URL

设置Group、Artifict、Type、Packaging、Java Version等参数

选择依赖

创建后的项目结构如下:

通过Spring Initializr创建的项目结构完整,生成的其他文件说明如下:
1、创建项目时,建议各字段间以-分割,例如:spring-boot-day02
2、.mvn属于隐藏文件,主要用于配合mvnw(Linux)、mvnw.cmd(Windows)进行项目启动
3、.gitIgnore属于Git忽略文件配置文件,用于Git使用
4、Spring Initializr创建项目完成后默认配置文件为application.properties,建议修改为.yml后缀,即:application.yml,相比于properties,yml更加主流
pom.xml内容说明:
<!--springboot父项目--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.7</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <!--引入web依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--引入test测试依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <!-- 打包插件,可以以java -jar打包 在打成jar包运行时,必须放入此插件配置,没有插件配置无法运行打包的项目 --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
8.3 添加配置
server:
port: 8888 # 修改内置服务器访问端口
servlet:
context-path: /spring-boot-02
8.4 新建Controller测试服务器
package com.study.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @ClassName HelloController
* @Description TODO
* @Author Jiangnan Cui
* @Date 2022/4/29 10:00
* @Version 1.0
*/
@RestController
@RequestMapping("hello")
public class HelloController {
//测试路径:http://localhost:8888/spring-boot-02/hello/test
@RequestMapping("test")
public String test(){
System.out.println("Hello SpringBoot!");
return "Hi SpringBoot!";
}
}
测试结果:

控制台输出:Hello SpringBoot!


2005

被折叠的 条评论
为什么被折叠?



