驼峰命名法
必须使用下划线分割
认下划线
@MapperScan(basePackages=“com.speoki.springboot.mapper”)
application.properties
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
Run Anything(double ctrl)
mvn 项目名 clean
将之前生成的清除掉
配置mapper
关于Mapper映射文件存放的位置的写法有两种
方法一
将Mapper接口和Mapper映射文件存放到src/main/java同一个目录下
在pom.xml中手动指定文件夹为resources
<!--手动指定文件夹为resources-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
方法二
将Mapper接口和Mapper映射文件分开存放
Mapper接口类存放到src/main/java目录下
Mapper映射文件存放到resources(类路径下)
在springboot核心配置文件中指定mapper映射文件位置
在application.properties中设置
mybatis.mapper-locations=classpath:mapper/*.xml
yes
Spring集成Mybatis的注解
@Mapper
@MapperScan
springboot项目下使用事务
事务是完整的功能/业务
事务只跟什么SQL语句有关系
事务只跟DML语句有关系:增删改
DML,DQL,DDL,TCL,DCL
开启事务
springboot版本小于2.0的还需要加
RestController的作用
返回的是json对象
该方法支持get和post请求(default)
@RequestMapping(value="/student",method = {RequestMethod.GET,RequestMethod.POST})
public @ResponseBody Object student(Integer id){
Student student = studentService.queryStudentById(id);
return student;
}
RESTFul
Springboot开发RESTFul主要通过
@PathVariable
@PostMapping
@DeleteMapping
@PutMapping
@GetMapping
方法请求混淆
方法一:替换
//@RequestMapping(value="/student/detail/{id}/{status}")
@DeleteMapping(value="/student/detail/{id}/{status}")
```
### 方法二换位
![在这里插入图片描述](https://img-blog.csdnimg.cn/4bba186513924a169ae8ff91d8b096d1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
```java
//@RequestMapping(value="/student/detail/{id}/{status}")
@DeleteMapping(value="/student/detail/{id}/{status}")
public Object student2(@PathVariable("id")Integer id,@PathVariable("status")Integer status){
Map<String,Object>retMap = new HashMap<>();
retMap.put("id",id);
retMap.put("status",status);
return retMap;
}
//以上这么写可能会出现请求错误
@DeleteMapping(value="/student/{id}/detail/{city}")
public Object student3(@PathVariable("id")Integer id,@PathVariable("city")Integer status){
Map<String,Object>retMap = new HashMap<>();
retMap.put("id",id);
retMap.put("city",status);
return retMap;
}
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/0971cd468c7047869289ca4e316ebf92.png)
### RESTful原则
![在这里插入图片描述](https://img-blog.csdnimg.cn/eb5ce4e2239d4b14b01fec05dcf8c1c3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
## springboot继承redis
1.添加依赖
![在这里插入图片描述](https://img-blog.csdnimg.cn/3626ce57d9a8455cbbe62618557a146f.png)
2.配置
![在这里插入图片描述](https://img-blog.csdnimg.cn/cae2a84618e74226a8e52e7a5f273d2b.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/8712ae3ad5764bfd83af2ed7a9019108.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/89dfe22d215541968d8af988faeb9516.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/40ff829244a548568ce01eeaad0ceefd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/a8b5b90a22e64f5783a43c8c82520467.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/41711a1693ac4d2dad346f0fb648fa6e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_15,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/85292de4a132473a832007d51efffdba.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/48c923ad0f824765be05236493a23526.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_18,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/bab3743aa4924584b567be8ae8400f2b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
### Springboot继承Dubbo分布式框架
![在这里插入图片描述](https://img-blog.csdnimg.cn/0417e1733cf345fdae97e86cd8221518.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/d6f9afbfefe8426ab37e2dc2c8ce88de.png)
## Dubbo
maven项目创建
![在这里插入图片描述](https://img-blog.csdnimg.cn/6f88a6eff94d4bd1ad95b0664c05cea1.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9cfad70f62454e94b97ed74f1113abf0.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/3fccadbe25b04066b2186f0486af0b47.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/797c058931394bcc8a8cf98d030b2dc4.png)
provider核心配置
![在这里插入图片描述](https://img-blog.csdnimg.cn/098800793b334f2da118c5f46e4debbf.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/d38722f66dd44872964e1cc03d6e9ea7.png)
consumer核心配置
![在这里插入图片描述](https://img-blog.csdnimg.cn/1b5385f089c84946a9946e3c0af96493.png)
### interface
#### Controller
![在这里插入图片描述](https://img-blog.csdnimg.cn/09a7db257fe84c8f813a55aa47c7fee7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
### 接口的实现类放在provider
![在这里插入图片描述](https://img-blog.csdnimg.cn/d1996c8cb1d24551a8a0f55dcbb39e79.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_18,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/1d32d10cd06d4c4398cc0c050e93c3e4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/3f10c07aee0445bd81782061ae8f969f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
加入`@Component`和`@Service注意在什么包下)`
![在这里插入图片描述](https://img-blog.csdnimg.cn/41d82e6277a544ea8afa926285d25b58.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
接口服务暴露配置1 ServiceImpl
![在这里插入图片描述](https://img-blog.csdnimg.cn/776af14433ed4f1e94e869d2158cba19.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
接口服务暴露配置2 Controller
![在这里插入图片描述](https://img-blog.csdnimg.cn/a496348aacef4835972cd4d65eda6cf1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
开启dubbo配置
![在这里插入图片描述](https://img-blog.csdnimg.cn/ba90b1a374324d05be29d3737f5d64e7.png)
### provider
配置
![在这里插入图片描述](https://img-blog.csdnimg.cn/ae3baba888874c8b92ffc49caf43ed1c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/024ada2161d44d19b48cd3a5c11f67d1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/28b4c4567d62407b96ba651a8517bc76.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/628357686c054ce49719a07e6f467ed9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/35767ff087ec47cd8fdeb2a16bcf2a2e.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/0d94a15c3c2a4f3cadbd03f9756e025d.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/4d768a857a7e43aa992a818489447989.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/73f291f04bab451899d683ac9bc83058.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/12f8461c6e2c4be5b2599206112a901b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/988987b78d5845e9b9c6f96eb4bcab4d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
SpringBoot 创建非web工程:直接获取ConfigurationApplicationContext
SpringBoot 创建非web工程:实现CommandLineRuner,重写run方法
### 关闭logo
在入口类写上
```java
@SpringBootApplication
public class Application{
public static void main(String[]args){
//获取入口SpringBoot类
SpringApplication springApplication = new SpringApplication(Application.class);
//设置它的属性
springApplication.setBannerMode(Banner.Mode.OFF);
springApplication.run(args);
}
}
```
```java
@SpringBootApplication
@MapperScan(basePackages="com.speoki.springboot.mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
### 修改启动logo
https://patorjk.com/software/taag/#p=display&f=Blocks&t=speoki
textAcII网址
SpringBoot使用拦截器
a.定义一个拦截器,实现HandlerInterceptor接口
b.创建一个配置类,即在SpringMVC配置文件中使用mvc:interceptors
### servlet使用
创建一个servlet它要继承HttpServlet
在web.xml配置文件中使用servlet servlet-mapping
1. 方式一
`@WebServlet` ,`@ServletComponentScan`
![在这里插入图片描述](https://img-blog.csdnimg.cn/684fe65dd925490f9e61364f7ef85c05.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
2. 方式二
(1). 配置类
@Configuration该注解将此类定义为配置类
相当于xml配置文件
@Bean ServletRegistrationBean
@Bean是一个方法级别上的注解,主要用在配置类里,相当`<beans><bean id="" class=""><beans>`
```java
@Configuration
public class ServletConfig {
@Bean
public ServletRegistrationBean myServletRegistrationBean(){
ServletRegistrationBean sRBean = new ServletRegistrationBean(new Myservlet(),"myservlet");
return sRBean;
}
}
```
(2)@WebServlet
## 过滤器
![在这里插入图片描述](https://img-blog.csdnimg.cn/35f6947f72e84a01adaeed610cf8edf7.png)
//@WebFilter(urlPatterns = "/myfilter")
```java
package com.speoki.springboot.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(urlPatterns = "/myfilter")
public class Myfilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("你已经进入过滤器");
filterChain.doFilter(servletRequest, servletResponse);
}
}
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/362757a76a6b4eed87fea731bed2fd41.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/e70607dac33149fea116582b27bd8efd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
```java
package com.speoki.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication//开启spring配置
//@ServletComponentScan(basePackages="com.speoki.springboot.servlet")
@ServletComponentScan(basePackages="com.speoki.springboot.filter")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
### 设置字符编码
过时的用法:
![在这里插入图片描述](https://img-blog.csdnimg.cn/5ff5524a9532485b89da349a2ba80bf9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
```java
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.http.encoding.charset=utf-8
```
新的用法
application.properties
```java
#关闭springboot的http字符编码的支持
#只有关闭该选项之后springboot字符编码过滤器才生效
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.force=true
server.servlet.encoding.enabled=true
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/aa9f4f4735e14fd6b7d71d7fb0794fea.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
## 打包与部署
首先确保项目可以运行
在pom.xml中设置打包方式
```xml
<!--修改打包方式-->
<packaging>war</packaging>
----
<build>
<!--指定打war包名称-->
<finalName>SpringBootWar</finalName>
<resources>
<resource>
<directory>src/main/webapp</directory>
<targetPath>META-INF/resources</targetPath>
<includes>
<include>*.*</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<!--编译打包插件-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
```
*入口类继承SpringBootServletInitializer*
然后重写方法
```java
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
//参数为当前springboot启动类
//构建新资源
return builder.sources(Application.class);
}
}
```
先clean 然后package
![在这里插入图片描述](https://img-blog.csdnimg.cn/463cfcd2d2094e5c8171a201a2a9b7b5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_17,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/8aa3ed95174d4b1ca69104550ad8c18b.png)
### 启动tomcat的方法
![在这里插入图片描述](https://img-blog.csdnimg.cn/6a323db860ec45629aad8d90721f1356.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/ab7ea798022e4ec4a61bd5da082d6eef.png)
## 打jar包需要的
![在这里插入图片描述](https://img-blog.csdnimg.cn/6df534cd4f794e2db714049f952f0f0f.png)
都还需要的
```java
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/d5f7269ddf5f41c3b5bee73d0f944240.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/dc498dba941e4ded81e3093164013806.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/65ad3dafa50b4c1193d152159867dd83.png)
lombook
@Slf4j(cintroller)
log.info("")
![在这里插入图片描述](https://img-blog.csdnimg.cn/a2ca13e6e050437c9f70ae25637a1d21.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/4748361cc54e4d7c9add4796c43ed8ee.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/56cfdd0e76a3423c8286587b18e7608b.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/493b064926bf418099ece2957d13d041.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/7cb7c0b8018a4384b35d0c5413a52017.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Blb2tp,size_14,color_FFFFFF,t_70,g_se,x_16)
root默认为空