目录

  • 一、SpringBoot整合Mybatis-plus
    • 1、引入依赖
    • 2、创建数据库
    • 3、整合代码生成器Generator
  • 二、什么是Swagger2,有什么作用?
  • 三、SpringBoot整合Swagger2实现的流程
    • 1、配置swagger
    • 4、进行测试
  • 四、更换Swagger的主题、皮肤
    • 1、主题
      • (1)、默认主题
      • (2)、BootStrap-UI
      • (3)、Layui-UI
      • (4)、MG-UI
  • 五、使用第三方工具Postman、ApiPost进行测试
    • 1、ApiPost和Postman的区别
    • 2、使用工具测试

一、SpringBoot整合Mybatis-plus

文档目录结构

1、引入依赖

首先我们先创建一个maven文件,然后导入xml依赖,我觉得数据要存储在数据库中比较直观一些,因此就加了Mysql,在刚开始学的可以直接省略掉。

 <dependencies><!--Spring boot启动依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--导入mysql依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.18</version></dependency><!--导入Mybatis-plus依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.5</version></dependency><!--导入Mybatis-Plus代码生成器依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.0.5</version></dependency><!--velocity模板引擎,Mybatis-plus代码生成器需要用到--><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.0</version></dependency><!--================================Swagger依赖=====================--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><!--引入默认主题--><!--访问的地址为:http://localhost:端口号/swagger-ui.html--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency><!--BootStrap-UI主题,个人感觉这个主题比较好用一些--><!--访问的地址为:http://localhost:端口号/doc.html--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><version>1.9.6</version></dependency><!--Layui-UI--><!--访问的地址为:http://localhost:端口号/docs.html--><dependency><groupId>com.github.caspar-chen</groupId><artifactId>swagger-ui-layer</artifactId><version>1.1.3</version></dependency><!--MG-UI--><!--访问的地址为:http://localhost:端口号/document.html--><dependency><groupId>com.zyplayer</groupId><artifactId>swagger-mg-ui</artifactId><version>1.0.6</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--Springboot测试依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources></build>

编写好配置

server.port=9099
spring.application.name=springboot-swagger# 导入数据库源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/login?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root # mybatis-plus
mybatis-plus.mapper-locations=classpath:com/tian/mapper/xml/*.xml
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl# Springfox使用的路径匹配是基于AntPathMatcher的,而Spring Boot 2.6.X使用的是PathPatternMatcher。
# spring.mvc.pathmatch.matching-strategy=ant_path_matcher

2、创建数据库

-- 创建数据库
CREATE DATABASE login
-- 创建表
CREATE TABLE `user`(
`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT 'id',
`username` VARCHAR(20) NOT NULL COMMENT '用户名',
`password` VARCHAR(20) NOT NULL COMMENT '密码',
`email` VARCHAR(20) NOT NULL COMMENT '邮箱',
PRIMARY KEY(id)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 插入数据
INSERT INTO user(id,username,password,email) VALUES (1,"123","123","422663804@qq.com"),(2,"1234","1234","422663804@qq.com")

3、整合代码生成器Generator

在测试文件方法中插入代码生成器

package com.tian;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.jupiter.api.Test;public class UserGenerator {@Testvoid generator(){// 1、创建代码生成器AutoGenerator mpg = new AutoGenerator();// 2、全局配置GlobalConfig gc = new GlobalConfig();String projectPath = System.getProperty("user.dir");// 这里填写你的项目地址gc.setOutputDir("D:\\SpringBoot_Study\\SpringBoot_Swagger2"+"/src/main/java");gc.setAuthor("Jingtian");gc.setOpen(false); //生成后是否打开资源管理器gc.setFileOverride(false); //重新生成时文件是否覆盖//UserServiegc.setServiceName("%sService");   //去掉Service接口的首字母Igc.setIdType(IdType.ID_WORKER_STR); //主键策略gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型gc.setSwagger2(true);//开启Swagger2模式mpg.setGlobalConfig(gc);// 3、数据源配置DataSourceConfig dsc = new DataSourceConfig();// 数据库的连接地址 login为数据库的名称dsc.setUrl("jdbc:mysql://localhost:3306/login?serverTimezone=GMT%2B8");dsc.setDriverName("com.mysql.cj.jdbc.Driver");dsc.setUsername("root"); // 数据库账号dsc.setPassword("root"); // 数据库密码dsc.setDbType(DbType.MYSQL);mpg.setDataSource(dsc);// 4、包配置PackageConfig pc = new PackageConfig();
//        pc.setModuleName("userService"); //模块名//包  com.tianpc.setParent("com.tian");//包  com.tian.controllerpc.setController("controller");pc.setEntity("entity");pc.setService("service");pc.setMapper("mapper");mpg.setPackageInfo(pc);// 5、策略配置StrategyConfig strategy = new StrategyConfig();strategy.setInclude("user"); // 这里设置数据库表的名称,这样才能导入strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体时去掉表前缀strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作strategy.setRestControllerStyle(true); //restful api风格控制器strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符mpg.setStrategy(strategy);// 6、执行mpg.execute();}
}

生成代码前后对比

二、什么是Swagger2,有什么作用?

作用:Swagger2是一个开源软件框架,可以帮助开发人员设计、构建、记录和使用RESTful Web服务,它将代码和文档融为一体,可以完美解决上面描述的问题,使开发人员将大部分精力集中在业务上,而不是繁杂琐碎的文档中。可以理解Swagger2为文章的标题目录,标题为我们的controller部分,目录是我们平时创建的接口。

常用的方法

方法名称 作用
@Api(tags=“标题”) 注解用在类上,用来描述整个Controller信息
@ApiOperation(value = “作用”, notes = “详情”) 注解用于开发的方法上,用来描述方法的信息,value是对方法作用的简单描述,notes是对该方法的补充说明。
@ApiModel(value = “用户注册表”) 用于描述实体类对象的信息,value参数为描述该实体类的信息。
@ApiIgnore() 表示不对某个接口生成文档。
@ApiResponse(code = 响应码 , message = “提示信息”) 对响应结果的描述。例@ApiResponse(code = 200, message = “查询成功”)
@ApiResponses({}) 里面放置两个或两个以上的@ApiResponse()
@ApiImplicitParam(paramType = “path”, name = “address”, value = “用户地址”, required = true,defaultValue = “shenzhen”) 注解用于方法上,用于描述方法的参数,paramType 是指方法参数的类型,可选值有path、query、body、form。name表示参数名称和参数变量对应;value是参数的描述信息;required表示该字段是否必填;defaultValue表示默认值,根据具体情况是否要写。
@ApiImplicitParams() 用于存放多个@ApiImplicitParam()

三、SpringBoot整合Swagger2实现的流程

1、配置swagger

因为我们上面已经导入过swagger 的依赖了,因此我们只需要配置swagger就行。

创建config包,然后创建SwaggerConfig 类。

package com.tian.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration
// 开启Swagger2
@EnableSwagger2
public class SwaggerConfig {/*** select()* apis(RequestHandlerSelectors.basePackage("com.tian")) 通过扫描包的路径,找到controller的位置* version 版本号* title 文档标题* apiInfo() 描述构建文档的基本信息,例如联系人的信息、版本号、标题等。* @return*/@BeanDocket docket() {return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.basePackage("com.tian")).build().apiInfo(new ApiInfoBuilder().description("测试文档").contact(new Contact("作者的姓名", "www.baidu.com", "422663804@qq.com")).version("v1.0").title("这里写你的文档标题").license("Apache2.0").licenseUrl("连接地址").build());}}

实体类

package com.tian.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;/*** <p>* * </p>** @author Jingtian* @since 2022-03-07*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="User对象", description="")
public class User implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "序号")@TableId(value = "id", type = IdType.ID_WORKER_STR)private Long id;@ApiModelProperty(value = "用户名")private String username;@ApiModelProperty(value = "密码")private String password;@ApiModelProperty(value = "邮箱")private String email;
}

控制类controller

package com.tian.controller;import com.tian.entity.User;
import com.tian.service.UserService;
import io.swagger.annotations.*;
import jdk.nashorn.internal.ir.annotations.Ignore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;/*** <p>* 前端控制器* </p>** @author Jingtian* @since 2022-03-07*/
@Api(tags = "用户数据接口")
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;// 根据用户的id查找用户,但这有点不严谨,一般都是根据token值获取到用户的信息@ApiOperation(value = "查询用户", notes = "根据id查询用户")@ApiImplicitParam(paramType = "path", name = "id", value = "用户id", required = true)@GetMapping("/{id}")public User getUserById(@PathVariable Long id) {User user = userService.getById(id);if (user == null) {System.out.println("查无此人");}return user;}// 注册用户@ApiOperation(value = "添加用户")@ApiResponses({@ApiResponse(code = 200, message = "注册成功"),@ApiResponse(code = 500, message = "注册失败")})@PostMapping("/addUser")public User addUser(@RequestBody User user) {userService.addUser(user);return user;}// 查询所有的用户@ApiOperation(value = "查找所用的用户")@GetMapping("/selectAllUser")public List<User> selectAllUser() {List<User> user = userService.selectAllUser();return user;}// 修改用户的信息 这里我用了比较苯的方法。@ApiOperation(value = "修改用户信息",notes = "根据用户名查找到用户的信息,然后在认证后删除")@PostMapping("/updateUser/{username}/{password}/{newPassword}")public User updateUser(@PathVariable String username,@PathVariable String password,@PathVariable String newPassword) {User user = userService.updateUser(username,password,newPassword);return user;}// 不显示该接口@GetMapping("/ignore")@Ignorepublic void IgnoreMethod(){}
}

UserMapper.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tian.mapper.UserMapper"></mapper>

UserMapper接口

package com.tian.mapper;import com.tian.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;/*** <p>*  Mapper 接口* </p>** @author Jingtian* @since 2022-03-07*/
@Mapper
public interface UserMapper extends BaseMapper<User> {}

UserService接口

package com.tian.service;import com.tian.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;import java.util.List;/*** <p>*  服务类* </p>** @author Jingtian* @since 2022-03-07*/
public interface UserService extends IService<User> {void addUser(User user);List<User> selectAllUser();User updateUser(String username,String password,String newPassword);
}

UserServiceImpl实现类

package com.tian.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.tian.entity.User;
import com.tian.mapper.UserMapper;
import com.tian.service.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;import java.util.List;/*** <p>* 服务实现类* </p>** @author Jingtian* @since 2022-03-07*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {@Overridepublic void addUser(User user) {// 先从接口哪里获取到我们传入的参数String username = user.getUsername();String password = user.getPassword();String email = user.getEmail();// 从数据库中查找该账号是否存在,如果不存在则进行注册,如果存在提醒其登录QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq("username", username);User user1 = baseMapper.selectOne(wrapper);if (user1 == null) {user.setPassword(password);user.setUsername(username);user.setEmail(email);baseMapper.insert(user);} else {System.out.println("您已注册,请登录");}}// 查询所有的用户@Overridepublic List<User> selectAllUser() {QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.orderByDesc("id");List<User> users = baseMapper.selectList(wrapper);return users;}// 修改用户的信息@Overridepublic User updateUser(String username,String password,String newPassword) {QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq("username",username);User user = baseMapper.selectOne(wrapper);if (user != null) {String username1 = user.getUsername();String password1 = user.getPassword();// 如果账号密码输入正确,就可以修改密码if (username1.equals(username) && password.equals(password1)){User user1 = user.setPassword(newPassword);baseMapper.update(user1,wrapper);return user;}else {System.out.println("账号或者密码有误");}}return user;}
}

4、进行测试

浏览器输入http://localhost:9099/swagger-ui.html

四、更换Swagger的主题、皮肤

1、主题

常用的Swagger的主题我这里整理了四个

主题 访问地址
默认主题 http://localhost:端口号/swagger-ui.html
BootStrap-UI http://localhost:端口号/doc.html
Layui-UI http://localhost:端口号/doc.html
MG-UI http://localhost:端口号/document.html

(1)、默认主题

访问地址:http://localhost:端口号/swagger-ui.html

  <!--引入默认主题--><!--访问的地址为:http://localhost:端口号/swagger-ui.html--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency>

(2)、BootStrap-UI

访问连接:http://localhost:端口号/doc.html

knife4j样式和BootStrap-UI差不多,因此就不写knife4j样式了

        <!--BootStrap-UI主题,个人感觉这个主题比较好用一些--><!--访问的地址为:http://localhost:端口号/doc.html--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><version>1.9.6</version></dependency>

(3)、Layui-UI

访问连接:http://localhost:端口号/docs.html

<!--Layui-UI--><!--访问的地址为:http://localhost:端口号/docs.html--><dependency><groupId>com.github.caspar-chen</groupId><artifactId>swagger-ui-layer</artifactId><version>1.1.3</version></dependency>

(4)、MG-UI

访问的地址为:http://localhost:端口号/document.html

        <!--MG-UI--><!--访问的地址为:http://localhost:端口号/document.html--><dependency><groupId>com.zyplayer</groupId><artifactId>swagger-mg-ui</artifactId><version>1.0.6</version></dependency>

五、使用第三方工具Postman、ApiPost进行测试

有时候接口测试不是很方面,一帮都会用到第三方的工具,常用的工具有两个Post以及ApiPost(推荐使用)。

使用方式,安装好Posman或者ApiPost就能使用了。

1、ApiPost和Postman的区别

2、使用工具测试

ApiPost界面

Postman使用界面

虽然Postman和ApiPost的功能差不多,但是上手起来还是ApiPost使用比较舒服一些。

SpringBoot整合Mybatis-Plus,代码生成器Generator以及Swagger(附源码、图文学习、Postman、ApiPost第三方工具的使用)相关推荐

  1. 数据权限过滤_带你实现SpringBoot整合JWT+Shiro进行权限认证「附源码地址」

    JWT JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息. 我们利用一定的编码生成 Token,并在 Token 中加入一 ...

  2. 利用SpringBoot和Vue实现前后端分离(附源码)

    利用SpringBoot和Vue实现前后端分离(附源码) 引言: 本文主要分享了SpringBoot和Vue整合实现前后端分离,实现了简单的增删查改:包括:项目的搭建.后端的实现.前台的实现:(附源码 ...

  3. Springboot实战:Springboot+Netty优雅的创建websocket客户端 (附源码下载)

    Springboot-cli 开发脚手架系列 Netty系列:Springboot+Netty优雅的创建websocket客户端 (附源码下载) 文章目录 Springboot-cli 开发脚手架系列 ...

  4. 炫酷,SpringBoot+Echarts实现用户访问地图可视化(附源码)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 SpringBoot+Echarts用户访问地图可视化 意义 在常 ...

  5. Spring Boot 整合 Shiro(三)Kaptcha验证码 附源码

    前言 本文是根据上篇<Spring Boot 整合Shiro(二)加密登录与密码加盐处理>进行修改,如有不明白的转上篇文章了解. 1.导入依赖 <!-- https://mvnrep ...

  6. 【超详细】SpringBoot与Shiro整合-权限管理实战实操(附源码地址)

    一.搭建SpringBoot开发环境 1. 安装好开发软件和Maven等 开发工具:Spring Tool Suite(TST) Maven :3.3.9 jdk:1.8 2. 创建springboo ...

  7. 一款SpringBoot轻量级物联网综合业务支撑平台,附源码

    SpringBoot轻量级物联网综合业务支撑平台源码 开发语言 : JAVA 数据库 : MySQL 开发工具 : IDEA 源码类型:全开源免费分享,需要学习可私信. 一.系统概述: 物联网综合业务 ...

  8. springboot入门系列教程|第九篇:springboot实现图片上传与显示(附源码)

    前言## 上一篇我们介绍了springboot如何实现自定义拦截器配合注解使用,那么这篇我们将介绍springboot实现图片上传的功能. 目录## 文章目录 前言## 目录## 项目创建### 项目 ...

  9. 基于SpringBoot + Vue的小程序商城项目(附源码),支持分销、团购、秒杀、优惠券。。。...

    前些时候一直有粉丝让我分享带分销的商城项目,网上收集了一波,希望能帮到大家. 面向对象 该程序是企业在创立初期很好的技术基础框架,加快公司项目开发进度,当然也可以对现有的系统进行升级: 个人开发者也可 ...

最新文章

  1. 几率大的REDIS面试题
  2. 用EC5/EC6自定义class的区别及用法 -- Phaser3网页游戏框架
  3. 【转载】SQL执行计划
  4. sdut 2134 数据结构实验之栈与队列四:括号匹配
  5. python----yield(generator)生成器
  6. 10000 字讲清楚 Spring Boot 注解原理
  7. 每周.NET前沿技术文章摘要(2017-05-24)
  8. matlab中离散数值求解器在哪,matlab - 在ode MATLAB求解器上使用中间值 - SO中文参考 - www.soinside.com...
  9. APPLE苹果电子设备模型样机|展示你的专业设计最佳选择
  10. java poi教程_Java完成POI的功能
  11. Python使用扩展库progressbar显示进度条
  12. 201触摸ic应用电路_PCB板和集成电路的区别有哪些
  13. canal 监控数据库表 快速使用
  14. LeetCode之同构字符串
  15. 单片机移位操作;_crol_ 和_cror_ 的使用
  16. 支付宝——手机网站支付接口研究
  17. C#属性简写用法 {get;set}
  18. Magic UI四子围城,2022折叠屏灵魂觉醒
  19. 阿里巴巴、文投控股战略投资万达电影
  20. Android TabLayout修改指示器宽度方案汇总

热门文章

  1. 落入技术陷阱的滴滴和头条
  2. python计算器小程序源码_python代码编写计算器小程序
  3. 为U-Editor增加字体
  4. Git网络通信五子棋C语言,GitHub - qq20004604/Backgammon-websocket: Backgammon五子棋网络版(websocket实现)...
  5. 报文格式【定长报文】
  6. 纯国产PC量产,美国芯片再遭重击,外媒:中国不买了
  7. Java面向对象程序设计 - 清览云题库
  8. 图像清晰度识别之Laplacian算子
  9. 长铗、周硕基、帅初,90分钟大辩论,这些观点绝对刷新你的认知!
  10. indesign可以换暂存盘吗_InDesign CS5_快捷键大全