一、SpringBoot介绍
SpringBoot其主要作用是快速的构建一个庞大的spring项目,并尽可能的减少一些xml配置。
1、SpringBoot的特点
- SpringBoot主要特征
- 创建独立的spring应用程序
- 直接内嵌tomcat,jetty,undertow,不需要再打成war部署了
- 提供了固定化的“starter”配置,用来简化配置
- 尽可能的自动配置spring和第三方库
- 提供产品级的功能,如:安全指标,运行状况监测和外部化配置等
- 绝对不会生成代码,并且不需要xml配置
- Springboot工程目录
- 入口类所在的包是controller,service,bean的父目录
- resource一般放置配置文件,旗下的所有内容打包后计入classes目录下
- static目录用来存放网站的静态资源,例如js,css,图片等内容
- templates,目录使用来存放网站的模板文件(xxx.html)只能通过控制层访问,例如thymeleaf,freemaker等
- public是网站公共资源的存放目录,不需要通过服务器内部进行访问
2、快速入门
添加父工程坐标
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
添加web启动器
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
SpringBoot启动类
```java package com.smiledog; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
- SpringBoot启动类
- @author SmILeDog
- @EnableAutoConfiguration 开启自动配置
- @ComponentScan 开启扫描包
**/
@SpringBootApplication
public class SpringBootRun {
public static void main(String[] args) {
} } ```SpringApplication.run(SpringBootRun.class,args);
3、一些注解
```java - @Controller 代表该类为与前端进行交互的类
- @RequestMapping 指定访问的请求路径,任何的请求方式都可以接收(post get put..)
- @ResponseBody 代表返回的数据类型以json格式返回
- @RequestBody 代表要以json的格式去接收前端传递的数据 *
- @RestController 该注解是@Controller和@ResponseBody的组合体 @RestController = @Controller + @ResponseBody
- @Controller和@RestController如何选择?
- 如果该类中大多数的返回值类型都为JSON格式,那就选择@RestController *
- @GetMapping、@PostMapping和@RequestMapping什么区别?
- @RequestMapping是一个整合注解,不区分请求方式
- @GetMapping、@PostMapping只能接收对应的请求方式的请求 *
- SpringBoot项目如何实现的自动配置?
- SpringBoot项目主要流程就是执行了一个main函数
- 同时添加了一个类上的注解@SpringBootApplication
- @SpringBootConfiguration 当前类为springBoot的配置类
- @EnableAutoConfiguration 开启自动配置
@ComponentScan 对应Spring中的扫描包
@ComponentScan用于扫描其他注解的,如何找到其他注解的呢?
- SpringBoot项目要求启动类必须在根目录下,这样才能扫描到其他包中的注解 *
- SpringBoot的配置文件时如何被加载的?
- SpringBoot项目启动时会自动去项目的根路径下查找一个名字叫application的文件
bootstrap.yml(bootstrap.properties)先加载
application.yml(application.properties)后加载
扩展问题:application.yml和bootstrap.yml文件的区别
配置文件的后缀.properties和.yml什么区别?
- 相同点:都是以key-value的形式进行存储的
不同点:展示的形式不同,yml格式更具层次感
注意事项:yml文件对格式有严格的要求,
- 1.子属性与父属性之间以两个空格隔开
- 2.值与属性之间有一个空格
- 3.值的后面不要有空格 *
- SpringBoot执行流程源码
- SpringBoot静态资源加载源码
- SpringBoot加载配置文件源码
<a name="5krl7"></a>
### 4、SpringBoot整合事务
```java
在业务层的事务管理(ServiceImpl)
在除查询操作的功能方法上打上这个注解@Transactional
5、SpringBoot通用Mapper
就是内置了一些增删改查的sql操作不用我们再写了,可以拿来直接用<!-- 通用mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.2</version>
</dependency>
~~~~~~~~~~~~~~~~~~~~~~~~~~~
@Mapper
public interface UserMapper extends tk.mybatis.mapper.common.Mapper<User>{
}
6、拦截器
```java package com.smiledog.interceptor;
import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
/**
- 拦截器
@author SmILeDog / @Component public class loginInterceptor implements HandlerInterceptor { /
- 请求前的处理
- @param request
- @param response
- @param handler
@return */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { System.out.println(“请求前的拦截!!!”); return true; }
/**
- 请求中的处理
- @param request
- @param response
- @param handler
@param modelAndView */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { System.out.println(“请求中的拦截!!!”); }
/**
- 请求后的处理
- @param request
- @param response
- @param handler
- @param ex
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
System.out.println(“请求后的拦截!!!”);
}
}
~~~自定义拦截~~package com.smiledog.config;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
- 自定义拦截器
@author SmILeDog / @Component public class MyInterceptor implements WebMvcConfigurer { @Autowired HandlerInterceptor handlerInterceptor; /
- 添加一个拦截器
@param registry */ @Override public void addInterceptors(InterceptorRegistry registry) {
//拦截处理
registry.addInterceptor(handlerInterceptor).addPathPatterns(“/update*”); } }
<a name="vWZDb"></a>
## 二、预设SpringBoot项目框架
<a name="PAU1u"></a>
#### pom.xml
```java
<!--引入Springboot的父工程 代表该项目是一个SpringBoot项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--该坐标包含了mybatis及mybatis-spring的jar包-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!--Thymeleaf启动器 前端模板引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
application.yml
#配置项目端口号
server:
port: 10086
#配置项目的访问根路径
#servlet:
#path: /SpringBoot
#配置静态资源存放路径
spring:
resources:
static-locations: classpath:/static/,classpath:/templates/,classpath:/public/,classpath:/resources/
#配置数据源
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///springboot
username: root
password: 1234
#配置mybatis
mybatis:
mapper-locations: classpath:/mapper/*.xml
type-aliases-package: com.smiledog.bean
#配合mybatis的日志输出
logging:
level:
com.smiledog.mapper: debug