昨日回顾
SSM框架的问题
- 配置文件多。所有的都需要手动配置
- 依赖多。而且会出现版本问题。例如json包就出现版本不兼容问题。
- 启动需要借助tomcat。还要手动集成tomcat插件。
学习目标
- 基于SpringBoot框架的程序开发步骤
- 熟练使用SpringBoot配置信息修改服务器配置
- 基于SpringBoot的完成SSM整合项目开发
一、SpringBoot简介
特点:
(1)快速开发spring应用的框架
(2)内嵌Tomcat, Jetty不需要单独安装容器,不需要部署,jar包直接发布一个web应用
(3)简化maven配置,parent这种方式,一站式引入需要的各种依赖
(4)基于注解的零配置思想,尽可能自动配置spring应用
(5)和各种流行框架,spring web mvc,mybatis,spring cloud无缝整合
(6)提供生产指标,健壮检查和外部化配置
1. 入门案例
SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程
问题导入
SpringMVC的HelloWord程序大家还记得吗?
-
SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程
-
原生开发SpringMVC程序过程
1.1 入门案例开发步骤
①:创建新模块,选择Spring初始化,并配置模块相关基础信息
国内阿里云镜像: https://start.aliyun.com/
②:选择当前模块需要使用的技术集(了解)
③:开发控制器类
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping("/{id}")
public String getById(@PathVariable Integer id) {
System.out.println("id ==> " + id);
return "hello , spring boot! ";
}
}
④:运行自动生成的Application类
- 最简SpringBoot程序所包含的基础文件
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<!--从父亲那里继承过来springboot启动信息-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
</parent>
<groupId>com.itgaohe</groupId>
<artifactId>bootDemo1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!--整合的web坐标 内置了tomcat服务器 无需再次配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.0</version>
</plugin>
</plugins>
</build>
</project>
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- Spring程序与SpringBoot程序对比
注意事项:
1.基于idea开发SpringBoot程序需要确保联网且能够加载到程序框架结构
2.将启动类从 包中提取出来放在 com.itgaohe包下
1.2 基于SpringBoot官网创建项目
projects=>overview===>选择springboot==>下滑找到quickstart your project选择 spring initializr
创建完成之后 选择 generate 生成。
1.3 手动创建 springboot项目
1.手动添加依赖
<?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">
<parent>
<!--从父亲那里继承过来springboot启动信息-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>springboot_02_quickstart</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!--整合的web坐标 内置了tomcat服务器 无需再次配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.0</version>
</plugin>
</plugins>
</build>
</project>
com.itgaohe.controller.BookController
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping("/{id}")
public String show(@PathVariable Integer id){
System.out.println("id:=====>");
return "hello springboot";
}
}
启动类
@SpringBootApplication
public class SpringBoot02QuickStartApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBoot02QuickStartApplication.class,args);
}
}
application.yml
server:
port: 8082
启动测试。。。
1.4 SpringBoot项目快速启动
① 对SpringBoot项目打包(执行Maven构建指令package)
从本地查看
② 执行启动指令
java -jar xxxxx.jar # 项目的名称根据实际情况修改
注意事项:
jar支持命令行启动需要依赖maven插件支持,请确认打包时是否具有SpringBoot对应的maven插件。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.0</version>
</plugin>
</plugins>
</build>
1.5教你一招:在Idea中隐藏指定文件/文件夹
创建SpringBoot工程时,使用SpringBoot向导也好,阿里云也罢,其实都是为了一个目的,得到一个标准的SpringBoot工程文件结构。这个时候就有新的问题出现了,标准的工程结构中包含了一些未知的文件夹,在开发的时候看起来特别别扭,这一节就来说说这些文件怎么处理。
处理方案无外乎两种,如果你对每一个文件/目录足够了解,没有用的完全可以删除掉,或者不删除,但是看着别扭,就设置文件为看不到就行了。删除不说了,直接Delete掉就好了,这一节说说如何隐藏指定的文件或文件夹信息。
既然是在Idea下做隐藏功能,肯定隶属于Idea的设置,设置方式如下。
步骤①:打开设置,【Files】→【Settings】
步骤②:打开文件类型设置界面,【Editor】→【File Types】→【Ignored Files and Folders】,忽略文件或文件夹显示
步骤③:添加你要隐藏的文件名称或文件夹名称,可以使用*号通配符,表示任意,设置完毕即可
到这里就做完了,其实就是Idea的一个小功能
总结
- Idea中隐藏指定文件或指定类型文件
- 【Files】→【Settings】
- 【Editor】→【File Types】→【Ignored Files and Folders】
- 输入要隐藏的名称,支持*号通配符
- 回车确认添加
2. SpringBoot概述
学习了SpringBoot入门案例之后,感觉对比SpringMVC哪一个更加方便简洁?
- SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程
- Spring程序缺点
- 配置繁琐
- 依赖设置繁琐
- SpringBoot程序优点
- 自动配置
- 起步依赖(简化依赖配置)
- 辅助功能(内置服务器,……)
2.1 起步依赖
(里面完成了依赖管理)
- 特点和作用
- 名称当中带有starter
- 帮我们把jar包批量导入,帮我们做版本适配。
- starter
- SpringBoot中常见项目名称 定义了当前项目使用的所有项目坐标,以达到减少依赖配置的目的
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
</parent>
<groupId>com.itgaohe</groupId>
<artifactId>bootDemo1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
点进去 发现 在 spring-boot-dependencies中制定了很多以来的版本信息。
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.0</version>
<packaging>pom</packaging>
<properties>
<servlet-api.version>4.0.1</servlet-api.version>
...
</properties>
</project>
所以springboot项目pom.xml中添加依赖不需要添加版本号,是springboot开发团队,为了用户开发中发生依赖冲突而考虑的,项目中会自动配置当前springboot的版本和其他依赖的兼容版本号。
eg:
<!--直接查看版本 发现是 8.0.29-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
- parent
- 所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到
- 减少依赖冲突的目的
- spring-boot-starter-parent(2.7.0)与 spring-boot-starter-parent(2.4.6)共计57处坐标版本不同
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.0</version>
</parent>
<artifactId>spring-boot-starter-parent</artifactId>
<packaging>pom</packaging>
</project>
- 实际开发
- 使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供
- 如发生坐标错误,再指定version(要小心版本冲突)
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet-api.version}</version>
</dependency>
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2.2 辅助功能
- SpringBoot程序启动
@SpringBootApplication
public class BootDemo1Application {
public static void main(String[] args) {
SpringApplication.run(BootDemo1Application.class, args);
}
}
- SpringBoot在创建项目时,采用jar的打包方式
- SpringBoot的引导类是项目的入口,运行main方法就可以启动项目
- 使用maven依赖管理变更起步依赖项
- Jetty比Tomcat更轻量级,可扩展性更强(相较于Tomcat),谷歌应用引擎(GAE)已经全面切换为Jetty
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--web起步依赖环境中,排除Tomcat起步依赖-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加Jetty起步依赖,版本由SpringBoot的starter控制-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
</dependencies>
小结:
- 什么是起步依赖?
- 名称当中带有starter的依赖
- 大量依赖的集合、帮我们做版本适配
- 官网查看:官网文档-》springboot文档-》Using Spring Boot-》1.5 Starters
- parent工程是干什么的
- 怎么样不使用boot中默认的依赖?排除+重新导入
二、基础配置
1. 配置文件格式
SpringBoot提供了多种属性配置方式
- application.properties
server.port=80
- application.yml
server:
port: 81
- application.yaml
server:
port: 82
1.2 自动提示功能消失解决方案
问题
先禁用配置文件 再打开
出现这样的问题
操作步骤:
最终应用即可。
1.3 SpringBoot配置文件加载顺序(了解)
- application.properties > application.yml > application.yaml
注意事项:
- SpringBoot核心配置文件名为application
- SpringBoot内置属性过多,且所有属性集中在一起修改,在使用时,通过提示键+关键字修改属性
2. yaml
properties配置文件(K=V),级别关系不明显、笨重
yaml概述
- YAML(YAML Ain't Markup Language),一种数据序列化格式
- 优点:
- 容易阅读
- 容易与脚本语言交互
- 以数据为核心,重数据轻格式
- YAML文件扩展名
- .yml(主流)
- .yaml
2.1 yaml语法规则
- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束(最上级)
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
- 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
- #表示注释
- 核心规则:数据前面要加空格与冒号隔开
2.2 yaml数组数据
- 数组数据在数据书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔
2.3 yaml数据读取
- 使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名……}
- 封装全部数据到Environment对象
- 自定义对象封装指定数据【常用】
// 1. 提供get set tostring
@Data
// 2. 被扫描
@Component
// 3. 指定标签前缀,自动装配
@ConfigurationProperties(prefix = "enterprise")
public class Enterprise {
private String name;
private Integer age;
private String tel;
private String[] subject;
}
测试:
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private Hobby hobby;
@GetMapping("/{id}")
public String show(@PathVariable Integer id) {
System.out.println("id:=====>");
System.out.println("hobby = " + hobby);
return "hello springboot";
}
}
- 自定义对象封装数据警告解决方案
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
3. 多环境开发配置
3.1 多环境启动配置
- yaml文件多环境启动
yml模式代码展示
#设置启用的环境
spring:
profiles:
active: test
---
#开发环境
spring:
profiles: dev
# 参数设定
server:
port: 8080
---
#生产环境
spring:
profiles: pro
# 参数设定
server:
port: 8081
---
#测试环境
spring:
config:
activate:
on-profile: test
# 参数设定
server:
port: 8082
- properties文件多环境启动
#主启动配置文件 application.properties
spring.profiles.active=pro
#环境分类配置文件 application-pro.properties
server.port=80
#环境分类配置文件 application-dev.properties
server.port=81
#环境分类配置文件application-test.properties
server.port=82
分别启动完成测试。
3.2 多环境启动命令格式
1.打包之前必须先clean
2.设置编码 全部为 UTF-8
- 带参数启动SpringBoot
启动之后可用通过 cmd中修改启动的端口和启动的环境 改变运行模式。
java –jar springboot.jar --spring.profiles.active=test
java –jar springboot.jar --server.port=88
java –jar springboot.jar --server.port=88 --spring.profiles.active=test
- 参数加载优先顺序
- 参看文档:https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config
翻译成中文后 从上往下 依次是优先级低—>高
- java system命令优先级》测试启动文件application.yml》application.properties》application.yml》application.yaml
4. 配置文件分类(掌握)
小结配置文件顺序:由外而内,由细致到粗糙
问题导入
SpringBoot的配置文件可以放在项目的哪些地方?
java –jar springboot.jar --spring.profiles.active=test --server.port=85 --server.servlet.context-path=/heima --server.tomcat.connection-timeout=-1 ... ...
-
SpringBoot中4级配置文件
1级: file :config/application.yml 【最高】
2级: file :application.yml
3级:classpath:config/application.yml
4级:classpath:application.yml 【最低】
-
作用:
1级与2级留做系统打包后设置通用属性(文件系统中)
3级与4级用于系统开发阶段设置通用属性(idea中)
分别针对不同的方式 进行启动测试 查看端口信息。
三、整合第三方技术
1. 整合JUnit
先回顾一下 spring整合junit方式
1.1 Spring整合JUnit(复习)
1.2 SpringBoot整合JUnit
【第一步】添加整合junit起步依赖(可以直接勾选)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
【第二步】编写测试类,默认自动生成了一个
public interface BookService {
void show();
}
@Service
public class BookServiceImpl implements BookService {
@Override
public void show() {
System.out.println("service .... run");
}
}
@SpringBootTest(classes = Bootdemo2Application.class)
class Springboottest{
@Autowired
private BookService bookService;
@Test
public void testSave() {
bookService.save();
}
}
1.3 相关注解
名称:@SpringBootTest
类型:测试类注解
位置:测试类定义上方
作用:设置JUnit加载的SpringBoot启动类
范例:
@SpringBootTest(classes = BootApplication.class)
class BootApplicationTests {}
相关属性
classes:设置SpringBoot启动类
注意事项:
如果测试类在SpringBoot启动类的包或子包中,可以省略启动类的设置,也就是省略classes的设定
如果在不同类型包中 com.itgaohe/com.itgaohe1 此时 就会报错 必须指定classes属性。
2. 基于SpringBoot实现SSM整合
2.1 Spring整合MyBatis(复习)
- SpringConfig(没有了!)
- 导入JdbcConfig
- 导入MyBatisConfig
@Configuration
@ComponentScan("com.itgaohe")
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class, MyBatisConfig.class})
public class SpringConfig {
}
- JDBCConfig(一个配置搞定)
- 定义数据源(加载properties配置项:driver、url、username、password)
#jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_db
jdbc.username=root
jdbc.password=itgaohe
public class JdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String userName;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource getDataSource() {
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(userName);
ds.setPassword(password);
return ds;
}
}
- MyBatisConfig(一个注解搞定)
- 定义SqlSessionFactoryBean
- 定义映射配置
@Bean
public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource) {
SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
ssfb.setTypeAliasesPackage("com.itgaohe.domain");
ssfb.setDataSource(dataSource);
return ssfb;
}
@Bean
public MapperScannerConfigurer getMapperScannerConfigurer() {
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setBasePackage("com.itgaohe.dao");
return msc;
}
2.2 SpringBoot整合MyBatis
- SpringBoot整合Spring(不存在)
- SpringBoot整合SpringMVC(不存在)
- SpringBoot整合MyBatis(主要)
1. 创建新模块,选择Spring初始化,并配置模块相关基础信息
2. 选择当前模块需要使用的技术集(MyBatis、MySQL)
3. 设置数据源参数
4. 定义数据层接口与映射配置
5. 测试类中注入dao接口,测试功能
①:创建新模块,选择Spring初始化,并配置模块相关基础信息
②:选择当前模块需要使用的技术集(MyBatis、MySQL)依赖
<!--mybatis-spring-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
③:设置数据源参数
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
username: root
password: itgaohe
type: com.alibaba.druid.pool.DruidDataSource
注意事项:
- SpringBoot版本低于2.4.3(不含),Mysql驱动版本大于8.0时,需要在url连接串中配置时区,或在MySQL数据库端配置时区解决此问题
jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
tips:MySQL JDBC URL各参数详解 - Jerry的文章 - 知乎 https://zhuanlan.zhihu.com/p/621493992
④:定义数据层接口与映射配置
public interface BookService {
Book findById(Integer id);
}
@Service
public class BookServiceImpl implements BookService {
@Autowired
private BookDao bookDao;
@Override
public Book findById(Integer id) {
return bookDao.findById(id);
}
}
@Mapper
public interface BookDao {
@Select("select * from tbl_book where id=#{id}")
Book getById(Integer id);
}
⑤:测试类中注入dao接口,测试功能
@SpringBootTest
class SpringbootCombineMybatisApplicationTests {
@Autowired
private BookService bookService;
@Test
void contextLoads() {
Book byId = bookService.findById(1);
System.out.println(byId);
}
}
⑥:controller层
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private BookService bookService;
@GetMapping("/{id}")
public Book findById(@PathVariable Integer id){
System.out.println("查询到了!");
Book book = bookService.findById(id);
System.out.println(book);
return book;
}
}
2.3 案例
1.导入 页面 pages到 resources资源目录下
2.SpringMvcSupport
@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
//消息转化器配置
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
//添加json消息转换器
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
converters.add(mappingJackson2HttpMessageConverter);
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/pages/**")
.addResourceLocations("classpath:/pages/");
registry.addResourceHandler("/js/**").addResourceLocations("classpath:/pages/");
System.out.println("页面初始化完成");
}
}
public interface BookService {
Book findById(Integer id);
List<Book> findAll();
int add(Book book);
int remove(Integer id);
int modify(Book book);
}
@Service
public class BookServiceImpl implements BookService {
@Autowired
private BookDao bookDao;
@Override
public Book findById(Integer id) {
return bookDao.findById(id);
}
@Override
public List<Book> findAll() {
return bookDao.selectAll();
}
@Override
public int add(Book book) {
return bookDao.insert(book);
}
@Override
public int remove(Integer id) {
return bookDao.delete(id);
}
@Override
public int modify(Book book) {
return bookDao.update(book);
}
}
@Mapper
public interface BookDao {
@Select("select * from tbl_book where id = #{id}")
Book findById(Integer id);
@Select("select * from tbl_book ")
List<Book> selectAll();
@Insert("insert into tbl_book (type,name,description) values(#{type},#{name},#{description})")
public int insert(Book book); //返回值表示影响的行数
@Update("update tbl_book set type = #{type}, name = #{name}, description = #{description} where id = #{id}")
public int update(Book book);
@Delete("delete from tbl_book where id = #{id}")
public int delete(Integer id);
}
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private BookService bookService;
@GetMapping("/{id}")
public Book findById(@PathVariable Integer id) {
System.out.println("查询到了!1");
System.out.println("查询到了!1");
Book book = bookService.findById(id);
System.out.println(book);
return book;
}
@GetMapping
public List<Book> findAll() {
System.out.println("Jinlaile");
List<Book> books = bookService.findAll();
return books;
}
// 新增 JSON参数
@PostMapping
public String add(@RequestBody Book book) {
System.out.println("添加");
int i = bookService.add(book);
if (i > 0) {
return "success";
} else {
return "error";
}
}
@DeleteMapping("/{id}")
public String delete(@PathVariable Integer id) {
int flag = bookService.remove(id);
if (flag > 0) {
return "success";
} else {
return "error";
}
}
@PutMapping
public String modify(@RequestBody Book book) {
int flag = bookService.modify(book);
if (flag > 0) {
return "success";
} else {
return "error";
}
}
}
2.4 springboot实现热部署
一、什么叫热部署
在实际开发中,我们做好的项目难免会出现一些问题,但是我们知道我们处理完这些问题后,我们需要重启一下服务器那么我们处理完问题后的项目才能生效(也就是说:修改了项目的代码后需要重启一下服务器然后修改后的项目才生效,不重启服务器的话要不然还是以前代码),因此这样每次修改项目问题的时候我们都要重启一次服务器在实际开发中是非常麻烦的,因此热部署就解决了这个问题,热部署可以在我们修改完项目代码后不用重启服务器就能把项目代码部署到服务器中(也就是说修改完项目代码后不用重启服务器修改后的项目代码就能生效)
二、热部署开启方式
2.1、第一种:手动启动热部署
也就是说:导入devtools坐标后,每当我们的项目中修改代码后,我们不用再重启服务器了,我们直接将修改后的项目Build(Ctrl +F9)一下,就可以把修改后的项目部署到服务器中了(目的和重启服务器一样了)
<!--热部署 ctrl++f9-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
2.2、第二种:自动启动热部署
在第一种手动启动热部署方式中,我们知道每次我们修改项目的代码后,都需要我们Build一下,那么项目才会部署到服务器中,那么这样每次修改一次都需要Build一次是不是太麻烦了点,因此我们可以用第二种自动启动热部署的形式解决每次修改完项目代码后都需要Build的毛病
第一步 设置自动构建项目
第二步:在项目中按:CTRL + ALT + SHIFT + / 找到Registry点击
么就可以点击CTRL+SHIFT+A搜索Registry点击进去找到上面的那个key在后面勾上对勾即可
如果点击进去后,发现没有compiler.automake.allow.when.app.running,那么就需要我们去这个地方进行勾选:
自动部署是一般在失去焦点五秒之后 自动启动热部署。
今日小结
今日能力目标
-
独立完成springBoot整合ssm框架实现book 页面的crud功能
tips:实现步骤参考第三节
-
独立完成springBoot整合ssm框架实现student(id,name,age,sex) 的crud功能
<enterprise>
<name>itgaohe</name>
<age>16</age>
<tel>18888292819</tel>
</enterprise>
标签:day07,SpringBoot,spring,class,boot,public,id
From: https://blog.csdn.net/qq_74289024/article/details/140375811