一、写在前面
最近在往springboot框架上琢磨,于是便写了一个springboot整合mybatis的小demo。整个demo的需求就是简单的增删改查并没有多大的技术含量,但是通过写此demo的过程中深刻感受到springboot对开发的简化和“约定大于配置”的好处。
1.首先看一下项目的目录结构
二、结构的具体分析
1.config层
config层主要是写的对swagger-ui的一些配置信息。Swagger是最受欢迎的REST APIs文档生成工具之一,它是一个Restful风格接口的文档在线自动生成和测试的框架 。简单的理解就是使用它你可以一目了然的看见你写的接口是增删改查的哪一个。
package com.zg.springbootdemo.config;
import com.google.common.base.Predicate;
import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/*
* 在与spring boot集成时,放在与Application.java同级的目录下。
* 通过@Configuration注解,让Spring来加载该类配置。
* 再通过@EnableSwagger2注解来启用Swagger2。
* */
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
Predicate<RequestHandler> predicate = input -> {
Class<?> declaringClass = input.declaringClass();
if (declaringClass == BasicErrorController.class)// 排除
return false;
if(declaringClass.isAnnotationPresent(RestController.class)) // 被注解的类
return true;
if(input.isAnnotatedWith(ResponseBody.class)) // 被注解的方法
return true;
return false;
};
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select().apis(predicate)
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
// 文档标题
.title("Spring Boot中使用Swagger2构建RESTful APIs")
// 文档描述
.description("http://www.tianyigps.com")
.termsOfServiceUrl("http://localhost:8080")
.version("version 2.0.0")
.contact(contact())
.build();
}
private Contact contact() {
return new Contact("@斑马", "http://www.baidu.com", "1037595085@qq.com");
}
}
2. controller层。
该层使用了restful风格书写接口并使用了swagger。
restful风格有一个统一接口的规定,即CRUD(create, read, update和delete,即数据的增删查改)操作,分别对应于HTTP方法:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源,这样就统一了数据操作的接口,仅通过HTTP方法,就可以完成对数据的所有增删查改工作。完整代码如下:
package com.zg.springbootdemo.controller;
import com.zg.springbootdemo.pojo.Demo;
import com.zg.springbootdemo.pojo.User;
import com.zg.springbootdemo.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.ibatis.annotations.Update;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import javax.jws.soap.SOAPBinding;
import java.util.List;
import java.util.Optional;
import java.util.Set;
@RestController
@RequestMapping("/user")
/*value 就是描述作用
@Api:用在类上,说