一 swagger
1.添加依赖
<!-- 配置swagger -->
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
2.创建swaggerConfig配置类
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket getDock() {
ApiInfoBuilder apiInfoBuilder = new ApiInfoBuilder();
//设置swagger文档标题
apiInfoBuilder
.title("《**api测试文档》")
.description("有详细接口文档规范")
.version("1.0.0")
.contact(new Contact("lx", "sss", "113@163.com"));
ApiInfo apiInfo = apiInfoBuilder.build();
//将api信息放入docket中,存放文档的基本信息,作者、版本。。。
//配置接口文档风格
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.select()
//配置controller中每一个类都会生成swagger测试文档
.apis(RequestHandlerSelectors.basePackage("com.getech.fmmall.controller"))
//any() 设置每一个访问mapping都会执行,regex 指定mapping会执行
.paths(PathSelectors.any())
.build();
return docket;
}
}
3.在controller接口中使用
@Controller
@ResponseBody
@Api(tags = "用户信息管理", value = "用户的各种信息的CRUD")
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@ApiOperation("用户登录接口")
@ApiImplicitParams({
@ApiImplicitParam(dataType = "String", name = "username", value = "用户登录账号", required = true),
@ApiImplicitParam(dataType = "string", name = "password", value = "用户登录密码", required = true)
})
@RequestMapping("/login")
public ResultMsg userLogin(@RequestParam("username") String userName,
@RequestParam(value = "password", defaultValue = "111111") String password) {
return userService.checkLogin(userName, password);
}
@ApiOperation("用户注册接口")
@ApiImplicitParams({
@ApiImplicitParam(dataType = "String",name = "username", value = "用户注册账号", required = true),
@ApiImplicitParam(dataType = "string", name = "password", value = "用户注册密码", required = true
)})
@PostMapping("/register")
public ResultMsg userRegister(String username,String password){
ResultMsg resultMsg = userService.registerUser(username,password);
return resultMsg;
}
}
4.swagger 访问地址:http://localhost:8080/swagger-ui.html
5.小插件
直接添加依赖就可以
访问路径http://localhost:8080/doc.html
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
二 RESTful
前后端分离开发的项目中,前后端之间是接口进行请求和响应,后端向前端提供请求时就要对外暴露一个URL;URL的设计不能是随意的,需要遵从一定的设计规范——RESTful
RESTful 是一种Web api的标准,也就是一种url设计风格/规范
-
每个URL请求路径代表服务器上的唯一资源
传统的URL设计: http://localhost:8080/goods/delete?goodsId=1 商品1 http://localhost:8080/goods/delete?goodsId=2 商品2 RESTful设计: http://localhost:8080/goods/delete/1 商品1 http://localhost:8080/goods/delete/2 商品2
@RequestMapping("/delete/{gid}") public ResultVO deleteGoods(@PathVariable("gid") int goodsId){ System.out.println("-----"+goodsId); return new ResultVO(10000,"delete success",null); }
-
使用不同的请求方式表示不同的操作
SpringMVC对RESTful风格提供了很好的支持,在我们定义一个接口的URL时,可以通过
@RequestMapping(value="/{id}",method=RequestMethod.GET)
形式指定请求方式,也可使用特定请求方式的注解设定URL@PostMapping("/add")
@DeleteMapping("/{id}")
@PutMapping("/{id}")
@GetMapping("/{id}")
- post 添加
- get 查询
- put 修改
- delete 删除
- option (预检)
根据ID删除一个商品: //http://localhost:8080/goods/1 [delete] @RequestMapping(value = "/{id}",method = RequestMethod.DELETE) public ResultVO deleteGoods(@PathVariable("id") int goodsId){ System.out.println("-----"+goodsId); return new ResultVO(10000,"delete success",null); } 根据ID查询一个商品: //http://localhost:8080/goods/1 [get] @RequestMapping(value = "/{id}",method = RequestMethod.GET) public ResultVO getGoods(@PathVariable("id") int goodsId){ return null; }
-
接口响应的资源的表现形式采用JSON(或者XML)
-
在控制类或者每个接口方法添加
@ResponseBody
注解将返回的对象格式为json -
或者直接在控制器类使用
@RestController
注解声明控制器 -
前端(Android\ios\pc)通过无状态的HTTP协议与后端接口进行交互
三 tkmapper
逆向工程,根据创建好的数据表,生成实体类、DAO、映射文件
添加逆向工程依赖
是依赖是一个mybatis的maven插件
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.4.4</version>
</dependency>
</dependencies>
</plugin>
逆向工程配置
- 在resources/generator目录下创建generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- 引入数据库连接配置 -->
<!-- <properties resource="jdbc.properties"/>-->
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- 配置 GeneratorDao -->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="
.generator.GeneratorDao"/>
</plugin>
<!-- 配置数据库连接 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/"
userId="" password="">
</jdbcConnection>
<!-- 配置实体类存放路径 -->
<javaModelGenerator targetPackage="entity" targetProject="src/main/java"/>
<!-- 配置 XML 存放路径 -->
<sqlMapGenerator targetPackage="/" targetProject="src/main/resources/mappers"/>
<!-- 配置 DAO 存放路径 -->
<javaClientGenerator targetPackage=".dao" targetProject="src/main/java" type="XMLMAPPER"/>
<!-- 配置需要指定生成的数据库和表,% 代表所有表 -->
<table catalog="数据库名" tableName="%" >
<!-- mysql 配置 -->
<!-- <generatedKey column="id" sqlStatement="Mysql" identity="true"/>-->
</table>
<!-- <table tableName="tb_roles">-->
<!-- <!– mysql 配置 –>-->
<!-- <generatedKey column="roleid" sqlStatement="Mysql" identity="true"/>-->
<!-- </table>-->
<!-- <table tableName="tb_permissions">-->
<!-- <!– mysql 配置 –>-->
<!-- <generatedKey column="perid" sqlStatement="Mysql" identity="true"/>-->
<!-- </table>-->
</context>
</generatorConfiguration>