文章目录
- 一、为什么使用springboot
- 二、如何快速新建一个springboot项目
- 2.1 https://start.spring.io/
- 2.2 使用IDE的插件进行快速创建(Idea,Eclipse)
- 三、标准spring项目结构如何理解
- 3.1 约定大于配置
- 3.1.1 约定结构长什么样
- 3.1.2 项目流程(登录为例)
- 3.2 restful风格的接口实现方式(常用注解)
- 3.2.1 RequestParam、PathParam、PathVariable用法
- 3.3 lombok注解
- 3.4 其他常用注解
- 3.4.1 @Resource和@Autowired注入bean的区别
- 3.5 常用配置介绍
- 3.6 springboot多环境配置
- 3.6.1 在配置文件中指定
- 3.6.2 打包时指定方法,在pom文件中指定。
- 3.6.3 jar包简单运行脚本示例(linux)
- 四、以jar包形式启动springboot项目
- 五、swagger介绍
- 5.1 定义
- 5.2 maven依赖
- 5.3 配置类
- 5.4 配置项
- 5.5 启动地址
- 5.6 常用注解
一、为什么使用springboot
1. 有利于开发(整合框架,例如整合了springMVC,Mybatis等框架)
2. 启动无需配置tomcat(java应用程序运行,实际以jar包运行,内置tomcat)
3. 自动管理依赖
4. 自带应用监控
二、如何快速新建一个springboot项目
2.1 https://start.spring.io/
2.2 使用IDE的插件进行快速创建(Idea,Eclipse)
步骤:New Project ——> Spring InitializrTips: idea没有Spring Initializr解决方法: plugins-Spring Assistant
maven:更改maven项目到本地非系统盘
三、标准spring项目结构如何理解
3.1 约定大于配置
3.1.1 约定结构长什么样
三层结构
controller:
与客户端(前台)打交道的类放在*Controller包里
负责分发前端请求,不做具体的业务处理
service:
后端系统放在service下
负责主要的业务处理
接口、实现类
dao:
数据访问层
与数据库交互
实体类
dto:
用于客户端和服务端交互时请求参数与响应参数的封装,以dto结尾的
entity:
用于服务端和数据库交互时参数的封装,比如查询数据库时响应数据的封装
util:
校验,如字符串是否为空,邮箱格式校验等
*Application:
主类,必须在最外层的包里
3.1.2 项目流程(登录为例)
1. 用户发送请求,到Controller层
2. Controller接收到参数,用dto里的UserDto类接收参数
3. 调用service层,具体的一个接口*Service接口,实际调用了子类*ServiceImpl
登录方法
4. 用户拿到密码,调用dao里的类
5. dao到数据库里查询相应的用户名密码是否存在
6. 将用户名,密码封装到跟数据库打交道的实体类entity中
7. 数据库跟entity交互,一行代码就确认用户名密码是否存在
8. 返回的结果通过dto层层传递给客户端
3.2 restful风格的接口实现方式(常用注解)
@SpringBootApplication:
springboot主类,用来加载springboot各种特性
@RestController:
Spring会转换返回值并将其写入HTTP响应
@RequestMapping:
用于类和方法,在方法级别时,用于处理HTTP的各种方法
类似于postman,对各种不同类型的请求进行配置
参数:value ,method
405 请求错误:get、post使用错误
@RequestBody:
将request body中的json/xml对象解析成该参数类型的Javabean对象
bean:实体类,类似于包含get/set方法的最小单元
@PathVariable:
处理动态的URI,URI的值可以作为控制器中处理方法的参数
eg: http://localhost:8080/goYiBaTest/byId/22eee21/222
@Post/Put/Get/DeleteMapping:
在方法级别上使用,用于处理HTTP的各种方法
@RequestMapping(value = "login",method = RequestMethod.POST) 等价于 @PostMapping("/login")
@RequestMapping(value = "login",method = RequestMethod.GET) 等价于 @GetMapping("/login")
@PathParam:
处理get请求的参数
eg:http://localhost:8080/goYiBaTest/byId?userId=12344&idNum=2232
@RequestParam:
处理get请求的参数
设置是否必传,设置默认值
获取参数
组合使用的例子:
模板:http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
@RequestMapping("/hello/{id}")
public String getDetails(@PathVariable(value="id") String id,
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
.......
}
3.2.1 RequestParam、PathParam、PathVariable用法
@GetMapping("/data/reqparam/{id}")
// @RequestParam 可以设置参数是否为必须传,以及默认值
// URL:xxxx/shop/data/reqparam/1?id=2
public String dataTest(@RequestParam(value="id",defaultValue = "2",required = true) String id) {
return id;
}
@GetMapping("/data/pathparam/{param}")
// 获取参数同@RequestParam
// URL:xxxx/shop/data/pathparam/1?param=2
public String dateTest3(@PathParam(value="param") String param) {
return param;
}
@GetMapping("/data/pathvar/{name}")
// URL:xxxx/shop/data/pathvar/1
public String dateTest2(@PathVariable(value="name",required = true) String name) {
return name;
}
3.3 lombok注解
功能: 引入lombok插件,使用注解的方式,替代冗余get\set方法
`dto文件中,对属性进行私有化,引入get\set方法进行调用`
步骤:
1. ide插件中查找Lombok插件并安装
2. dto文件类前加注解@Data
3.4 其他常用注解
Component:声明为springboot的bean
RestController:controller层的bean
Repository:用于dao层的bean
Service:用于service层的bean
Autowired:用于向一个bean中注入其他bean
Bean:声明其为bean实例,常和Configuration配合使用
Configuration:用于声明springboot的配置文件夹
Value("$(key)"):获取springboot配置文件中的值
@Value("${test.key1}")
private String testKey1;
3.4.1 @Resource和@Autowired注入bean的区别
参考:
共同点
@Resource和@Autowired都可以作为注入属性的修饰,在接口仅有单一实现类时,两个注解的修饰效果相同,可以互相替换,不影响使用。
不同点
@Resource
@Resource是Java自己的注解
@Resource有两个属性是比较重要的,分是name和type;Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。
如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
@Autowired
@Autowired是spring的注解,是spring2.5版本引入的
@Autowired只根据type进行注入,不会去匹配name。如果涉及到type无法辨别注入对象时,那需要依赖@Qualifier或@Primary注解一起来修饰。
一个接口有多个实现类
共同点:
两者都可以使用@Qualifier来标注需要注入的类。
@Resource(name="woman")指定对应的实现名称
方法一:使用name属性指定
@Resource(name="woman")
方法二:@Qualifier
注入类上添加注解@Resource
注入类上添加注解@Qualifier("woman")
@Autowired的就根据在实现类上添加@Primary注解来区分
方法一:@Qualifier
注入类上添加注解@Autowired
注入类上添加注解@Qualifier("woman")
方法二:@Primary
注入类上添加注解@Autowired
实现类上添加注解@Primary
@Primary是修饰实现类的,告诉spring,如果有多个实现类时,优先注入被@Primary注解修饰的那个
3.5 常用配置介绍
配置文件位置在resources包下,有以下两种文件形式,一般使用yaml格式的文件,语法如下:
application.yaml或application.yml
server:
port:8093
connection-timeout:18000000
servlet:
session:
timeout:30m # 30分钟,测试的话时间不能太短,否则不准。单位:h、m、s,不写单位默认毫秒。
spring:
application:
name:aitest # springboot 微服务单元名称,在spring cloud集群中用该名称来识别这个微服务单元
application.properties
server.port=8093
3.6 springboot多环境配置
目的:实现开发、测试、用户等的环境隔离。
3.6.1 在配置文件中指定
3.6.2 打包时指定方法,在pom文件中指定。
<profiles>
<!-- 开发环境 默认开发环境-->
<profile>
<id>dev</id>
<properties>
<spring.profile.active>dev</spring.profile.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- 测试环境 -->
<profile>
<id>test</id>
<properties>
<spring.profile.active>test</spring.profile.active>
</properties>
</profile>
<!-- 用户环境 -->
<profile>
<id>usr</id>
<properties>
<spring.profile.active>usr</spring.profile.active>
</properties>
</profile>
<!-- 预生产环境 -->
<profile>
<id>uat</id>
<properties>
<spring.profile.active>uat</spring.profile.active>
</properties>
</profile>
</profiles>
3.6.3 jar包简单运行脚本示例(linux)
test_start_8081.sh
nohup java -Xms256m -Xmx512m -XX:PermSize=64m -XX:maxPermSize=128m -server -Dsercer.port=8081 -jar aitest-mini.jar 'aitest-mini' --spring.profiles.active=dev >>./test_info_8081.log 2>&1 &
sh test_start_8081.sh # 运行
ps -ef|grep aitest-mini # 查进程
tail -f test_info_8081.log # 实时查看日志
四、以jar包形式启动springboot项目
打包: mvn clean install -U -DskipTests
命令行启动:java -jar *.jar
五、swagger介绍
5.1 定义
Swagger:
一个规范和完整的框架
用于生成、描述、调用和可视化 RESTful 风格的 Web 服务框架
总体目标:使客户端和文件系统作为服务器以同样的速度来更新。
文件的方法、参数和模型紧密集成到服务器端的代码,允许 API 始终保持同步。
Swagger UI:
允许任何人(无论您是开发团队还是最终用户)可视化API资源并与之交互
无需任何实现逻辑
根据您的OpenAPI(以前称为swagger)规范自动生成,具有可视化文档
简化后端实现和客户端使用,方便前后端联调
API(Application Programming Interface,应用程序接口):
预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。
5.2 maven依赖
<!-- swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-bean-validators</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>1.5.22</version>
</dependency>
5.3 配置类
@Configuration
@EnableSwagger2
public class SwaggerConfig {
}
5.4 配置项
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket docket(){
//header
ParameterBuilder builder = new ParameterBuilder();
builder.parameterType("header").name("token")
.description("token值")
.required(true)
.modelRef(new ModelRef("string")); //在swagger里显示header
//apiInfo
return new Docket(DocumentationType.SWAGGER_2)
.groupName("goyiba_interface")
.apiInfo(apiInfo())
.globalOperationParameters(Lists.newArrayList(builder.build()))
.select().paths(PathSelectors.any()).build();
}
public ApiInfo apiInfo(){
return new ApiInfoBuilder()
.title("goyiba-mini系统")
.description("goyiba-mini接口文档")
.contact(new Contact("tlibn","","103@qq.com")) //联系人
.version("1.0")
.build();
}
}
5.5 启动地址
http://localhost:8080/swagger-ui.html/
5.6 常用注解
@Api(tags="gouyiba-测试任务管理")
添加到Controller类
@ApiOperation(value="添加测试任务")
添加到接口方法上
@ApiModel(value=“新增测试任务类”,description="请求参数类")
实体类,请求参数
@ApiModelProperty(value="测试用例的id列表", example="12",required=true)
方法