SpringBoot-入门
[toc]
零、资料 视频:
文档:
国内替换Spring Initizer脚手架: https://start.springboot.io
社区版的配置:
替换JUC(Eclipse):
异常映射的处理(XML):
一、基础篇 1、学习目标
IDEA 隐藏不想看见的文件:
[IDEA隐藏不必要的文件 例如.mvnw .git .idea]_头顶凉凉先生丶的博客-CSDN博客_idea隐藏不需要的文件
2、入门案例 在开始入门案例前,需要知道SpringBoot是干什么的?
SpringBoot 是用于简化Spring 环境的搭建和开发的框架。
SpringBoot 内置Tomcat,因此,可以直接运行项目。
SpringBoot 内置了许多配置,因此,即使不写配置文件,也能运行项目。(maven依赖的版本来自parent
,坐标来自starter
)
SpringBoot 配置文件 支持两种格式的properties
和yml
(推荐)【application.yml
】
注意:
所有的类都要写在启动类的同包或子包下,否则无法被 SpringBoot 扫描到。
案例-视频:
2.1、创建 SpringBoot 工程 方式一:官网创建,下载到本地,导入IDEA:官网创建SpringBoot工程
方式二:IDEA 创建SpringBoot工程:
2.2、添加 Maven 依赖(按需) 默认生成的 POM.xml
文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 <?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 > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-parent</artifactId > <version > 2.6.4</version > <relativePath /> </parent > <groupId > com.cyw</groupId > <artifactId > ex01</artifactId > <version > 0.0.1-SNAPSHOT</version > <name > ex01</name > <description > ex01</description > <properties > <java.version > 1.8</java.version > </properties > <dependencies > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-web</artifactId > </dependency > <dependency > <groupId > org.projectlombok</groupId > <artifactId > lombok</artifactId > <optional > true</optional > </dependency > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-test</artifactId > <scope > test</scope > </dependency > </dependencies > <build > <plugins > <plugin > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-maven-plugin</artifactId > <configuration > <excludes > <exclude > <groupId > org.projectlombok</groupId > <artifactId > lombok</artifactId > </exclude > </excludes > </configuration > </plugin > </plugins > </build > </project >
可以发现,以上默认生成的Maven配置中,最主要的是:
parent
节点:继承SpringBoot的默认配置,SpiringBoot默认配置了许多Maven依赖的版本,通过parent节点,可以直接省略一部分Maven依赖版本号的编写。
dependencies
节点:用于放置Maven配置,一般使用SpringBoot来编写Web项目时,一定会引入spring-boot-starter-web
依赖、spring-boot-starter-test
依赖。
build
节点:一般SpringBoot想要运行项目,需要使用Maven来打成 jar 包,因此,需要引入SpringBoot的Maven打包的插件。
2.3、修改配置文件(按需) application.yml
:
2.4、目录结构: 2.5、编写 Controller 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package com.cyw.ex01.controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController public class IndexController { @RequestMapping("/") public String index () { return "hello world" ; } }
2.6、启动项目 在启动主类(引导类)中,运行项目:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package com.cyw.ex01;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication public class Ex01Application { public static void main (String[] args) { SpringApplication.run(Ex01Application.class, args); } }
2.7、更换内置的Tomcat 先排除Tomcat依赖,再导入Jetty依赖。
在POM.xml
中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-web</artifactId > <exclusions > <exclusion > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-tomcat</artifactId > </exclusion > </exclusions > </dependency > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-jetty</artifactId > </dependency >
3、RestFul 风格开发 RestFul 风格,就是使用HTTP的get
查询、post
添加、put
修改、delete
删除请求方式来访问Controller,进行增删改查。
(put 和 delete类似)
get
请求:参数以名词的形式,拼接在路径上/books/{id}
(其中,{id}
是后端@RequestMapping
注解中的的占位符)。
post
请求:参数封装在请求体内,在Controller的控制方法的参数内,使用@RequestBody
来修饰参数,封装前端传过来的参数。
RestFul 注解:
@RestController
:相当于 @Controller
+@ResponseBody
@RequestMapping("/books")
@GetMapping("/books")
@PostMapping("/books")
@PutMapping
@DeleteMapping("/books/{id}")
GET请求的案例(控制器中):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 @RequestMapping("/books/{id}") public Result getBookById (@PathVariable("id") int id) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("id" ,2 ); map.put("bookname" ,"Java编程思想(第2版)" ); return Result.ok("请求成功" ,map); } @GetMapping("/books/{id}") public Result getBookById (@PathVariable("id") int id) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("id" ,2 ); map.put("bookname" ,"Java编程思想(第2版)" ); return Result.ok("请求成功" ,map); }
POST请求的案例(控制器中):
1 2 3 4 5 6 7 8 9 10 11 12 13 @RequestMapping(value="/books",method = RequestMethod.POST) public Result saveBook (@RequestBody Book book) { bookService.saveBook(book); return Result.ok("保存成功" ); } @PostMapping("/books") public Result saveBook (@RequestBody Book book) { bookService.saveBook(book); return Result.ok("保存成功" ); }
4、配置文件 配置文件-官网文档
SpringBoot 支持 3种 配置文件的格式:.properties
、.yml
、.yaml
配置文件的优先级:
(1).properties
【优先级最高】
(2).yml
(3).yaml
多个不同格式的配置文件共存:
不同的配置文件对同一个配置项做配置:使用优先级高的配置
不同的配置文件对不同的配置项做配置:共存
properties
配置文件的格式是key=value
yml
配置文件的格式是分层(注意value前的一个空格):
1 2 3 4 server: port: 8080 servlet: context-path: /test01
yaml
配置文件就是yml
文件:
读取 Java 读取yml
配置值的三种方式:
(方式一)在 Java
类 中,读取 yml
配置文件中的数据:【注入单个配置值
】
1 2 3 4 5 6 7 user: name: zhangsan @Value("${user.name}") private String username;
在 yml
中引用yml配置:
1 2 3 4 5 6 baseDir: c:\tmp tmpDir: ${baseDir}\dataDir tmpDir: "${baseDir}\data Dir"
(方式二)Java类
批量读取 yml
中的配置【Environment 对象注入多个配置值
】:
1 2 3 4 5 6 7 8 9 10 @Autowired private Environment env; @RequestMapping("/") public String index () { System.out.println(env.getProperty("user" ));
(方式三)使用Java类来封装yml
配置:【ConfigurationProperties注解 注入多个配置值
】:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 datasource: driver: com.mysql.jdbc.Driver url: jdbc:mysql: username: root password: root @Component @ConfigurationProperties("datasource") public class myDataSource { private String driver; private String url; private String username; private String password; } @Autowired private myDataSource mydata; mydata.getUserName();
5、整合 Junit SpringBoot 项目中,一般创建项目时,会导入spring-boot-starter-test
Maven依赖,这就是整合Junit所需达到包。
在“测试启动类”中,需要使用@SpringBootTest
注解修饰该启动类。
注意: “测试启动类”必须与“启动类”的包路径一致,否则,需要@SpringBootTest(classes=启动类.class)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package com.cyw.ex01;import org.junit.jupiter.api.Test;import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest class Ex01ApplicationTests { @Autowired private UserMapper userMapper; @Test void contextLoads () { userMapper.getUserById(12 ); System.out.println("SpringBoot 的Junit 测试" ); } }
6、整合Mybatis 注意:
所有SpringBoot的包,坐标都是:spring-boot-starter
开头的。
所有非 SpringBoot的包,坐标都是:xxxxx-boot-starter
结尾的。
6.1、导入对应的 starter POM.xml
:
1 2 3 4 5 <dependency > <groupId > org.mybatis.spring.boot</groupId > <artifactId > mybatis-spring-boot-starter</artifactId > <version > 2.2.2</version > </dependency >
6.2、配置 Mybatis 配置数据源
application.yml
:
1 2 3 4 5 6 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC username: root password: root
6.3、编写 mapper 接口 在mapper接口上添加@Mapper
注解:
1 2 3 4 5 6 7 8 9 10 11 12 13 package com.cyw.ex01.mapper;import com.cyw.ex01.pojo.Book;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Select;@Mapper public interface BookMapper { @Select("select * from books where id = #{id}") public Book getBookById (Integer id) ; }
6.4、配置 mapper 接口的注解扫描 在启动类上配置注解扫描:@ComponentScan("com.cyw.ex01.mapper")
1 2 3 4 5 6 7 8 9 @SpringBootApplication @ComponentScan("com.cyw.ex01.mapper") public class Ex01Application { public static void main (String[] args) { ConfigurableApplicationContext context = SpringApplication.run(Ex01Application.class, args); } }
6.5、测试代码 (1)自动装配 mapper:
1 2 @Autowired private BookMapper bookMapper;
(2)使用mapper:
1 2 3 4 5 @Test void testGetBookById () { bookMapper.getBookById(1 ); }
7、整合 Mybatis Plus 7.1、导入坐标 1 2 3 4 5 <dependency > <groupId > com.baomidou</groupId > <artifactId > mybatis-plus-boot-starter</artifactId > <version > 3.5.1</version > </dependency >
7.2、编写 mapper 接口 添加@Mapper
注解,继承BaseMapper
接口:
1 2 3 4 @Mapper public interface BookMapper extends BaseMapper <Book > { }
7.3、 扫描 mapper包 给启动类添加组件扫描的注解:
1 @ComponentScan("com.cyw.ex01.mapper")
7.4、测试代码 1 2 3 4 5 6 7 @Autowired private BookMapper bookMapper;@Test void testGetBookById () { bookMapper.selectById(1 ); }
8、整合 Druid SpringBoot 自带了一个数据源 Hikari,若想换成Druid,可以进行以下配置
8.1、配置 starter 1 2 3 4 5 <dependency > <groupId > com.alibaba</groupId > <artifactId > druid-spring-boot-starter</artifactId > <version > 1.2.8</version > </dependency >
8.2、配置数据源 application.yml
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC username: root password: root type: com.alibaba.druid.pool.DruidDataSource spring: datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC username: root password: root
9、SSMP-整合案例 效果展示:
二、实用篇 1、学习目标 2、运维实用篇 3、开发实用篇 三、原理篇 1、学习目标