springboot框架的搭建(6)--》swagger-ui +新的mybatis生成器配置(包括swagger注解自动生成)
引入新的依赖
<!-- MyBatis 生成器 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.3</version>
</dependency>
<!--Swagger-UI API文档生产工具-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
先配置代码生成器吧 配置文件: generator.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>
<context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<property name="javaFileEncoding" value="UTF-8"/>
<!-- 为模型生成序列化方法-->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<!-- 为生成的Java模型创建一个toString方法 -->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
<!--生成mapper.xml时覆盖原文件 注释掉了 好像新版本取消了 不然会报错-->
<!-- <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />-->
<!--可以自定义生成model的代码注释-->
<commentGenerator type="com.lin.durid1.Generator.CommentGenerator">
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
<property name="suppressDate" value="true"/>
<property name="addRemarkComments" value="true"/>
</commentGenerator>
<!--jdbc的数据库连接-->
<!--这里是以变量的形式定义,具体的值在 application.properties 文件中-->
<!--jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/test1?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&useSSL=false"
userId="root"
password="root">
</jdbcConnection>
<!--指定生成model的路径-->
<javaModelGenerator targetPackage="com.lin.durid1.mbg.model" targetProject="src\main\java"/>
<!--指定生成mapper.xml的路径-->
<sqlMapGenerator targetPackage="com.lin.durid1.mbg.mapper" targetProject="src\main\resources"/>
<!--指定生成mapper接口的的路径-->
<javaClientGenerator type="XMLMAPPER" targetPackage="generator.mapper"
targetProject="src\main\java"/>
<!--生成与表对应的类名-->
<table tableName="people" domainObjectName="people" enableCountByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false" enableUpdateByExample="false" selectByExampleQueryId="false"></table>
<table tableName="account" domainObjectName="account" enableCountByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false" enableUpdateByExample="false" selectByExampleQueryId="false"></table>
</context>
</generatorConfiguration>
CommentGenerator.class 重写注释生成(用于生成swaggerui 注解)
package com.lin.durid1.Generator; import org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.dom.java.CompilationUnit; import org.mybatis.generator.api.dom.java.Field; import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType; import org.mybatis.generator.internal.DefaultCommentGenerator; import org.mybatis.generator.internal.util.StringUtility; import java.util.Properties; /** * 自定义注释生成器 * Created by macro on 2018/4/26. */ public class CommentGenerator extends DefaultCommentGenerator { private boolean addRemarkComments = false; private static final String EXAMPLE_SUFFIX="Example"; private static final String API_MODEL_PROPERTY_FULL_CLASS_NAME="io.swagger.annotations.ApiModelProperty"; /** * 设置用户配置的参数 */ @Override public void addConfigurationProperties(Properties properties) { super.addConfigurationProperties(properties); this.addRemarkComments = StringUtility.isTrue(properties.getProperty("addRemarkComments")); } /** * 给字段添加注释 */ @Override public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { String remarks = introspectedColumn.getRemarks(); //根据参数和备注信息判断是否添加备注信息 if(addRemarkComments&&StringUtility.stringHasValue(remarks)){ // addFieldJavaDoc(field, remarks); //数据库中特殊字符需要转义 if(remarks.contains("\"")){ remarks = remarks.replace("\"","'"); } //给model的字段添加swagger注解 field.addJavaDocLine("@ApiModelProperty(value = \""+remarks+"\")"); } } /** * 给model的字段添加注释 */ private void addFieldJavaDoc(Field field, String remarks) { //文档注释开始 field.addJavaDocLine("/**"); //获取数据库字段的备注信息 String[] remarkLines = remarks.split(System.getProperty("line.separator")); for(String remarkLine:remarkLines){ field.addJavaDocLine(" * "+remarkLine); } addJavadocTag(field, false); field.addJavaDocLine(" */"); } @Override public void addJavaFileComment(CompilationUnit compilationUnit) { super.addJavaFileComment(compilationUnit); //只在model中添加swagger注解类的导入 if(!compilationUnit.isJavaInterface()&&!compilationUnit.getType().getFullyQualifiedName().contains(EXAMPLE_SUFFIX)){ compilationUnit.addImportedType(new FullyQualifiedJavaType(API_MODEL_PROPERTY_FULL_CLASS_NAME)); } } }
代码启动器 -这次用main方法启动
Generator.class 注意修改xml配置的名字
package com.lin.durid1.Generator; import org.mybatis.generator.api.MyBatisGenerator; import org.mybatis.generator.config.Configuration; import org.mybatis.generator.config.xml.ConfigurationParser; import org.mybatis.generator.internal.DefaultShellCallback; import java.io.InputStream; import java.util.ArrayList; import java.util.List; /** * 用于生产MBG的代码 */ public class Generator { public static void main(String[] args) throws Exception { //MBG 执行过程中的警告信息 List<String> warnings = new ArrayList<String>(); //当生成的代码重复时,覆盖原代码 boolean overwrite = true; //读取我们的 MBG 配置文件 InputStream is = Generator.class.getResourceAsStream("/generator.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(is); is.close(); DefaultShellCallback callback = new DefaultShellCallback(overwrite); //创建 MBG MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); //执行生成代码 myBatisGenerator.generate(null); //输出警告信息 for (String warning : warnings) { System.out.println(warning); } } }
文件目录图:

swagger-ui配置
常用注解
- @Api:用于修饰Controller类,生成Controller相关文档信息
- @ApiOperation:用于修饰Controller类中的方法,生成接口方法相关文档信息
- @ApiParam:用于修饰接口中的参数,生成接口参数相关文档信息
- @ApiModelProperty:用于修饰实体类的属性,当实体类是请求参数或返回结果时,直接生成相关文档信息
添加swagger-ui 配置
Swagger2Config.class
package com.lin.durid1.Config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @EnableSwagger2 public class Swagger2Config { @Bean public Docket createRestApi(){ return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() //为当前包下controller生成API文档 .apis(RequestHandlerSelectors.basePackage("com.lin.durid1.Controller")) //为有@Api注解的Controller生成API文档 // .apis(RequestHandlerSelectors.withClassAnnotation(Api.class)) //为有@ApiOperation注解的方法生成API文档 // .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("SwaggerUI演示") .description("lin-swagger") .contact("lin") .version("1.0") .build(); } }
给controller层添加 swagger注解
package com.lin.durid1.Controller; import com.lin.durid1.Dao.accountDao; import com.lin.durid1.Dao.accountMapper; import com.lin.durid1.enti.account; import com.lin.durid1.enti.people; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.ibatis.annotations.Param; import org.mybatis.logging.Logger; import org.mybatis.logging.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.sql.DataSource; import java.sql.SQLException; import java.util.List; /** * swagger * Controller * Created by lin on 2020/2/19. */ @Api(tags = "userController", description = "演示 ") @RestController @RequestMapping("/test") public class UserController { @Resource DataSource dataSource; private static final Logger LOGGER = LoggerFactory.getLogger(UserController.class); @Resource accountDao accountDao; @ApiOperation("数据库连接状态") @GetMapping("/w") public void show() throws SQLException { System.out.println(dataSource.getConnection()); } @ApiOperation("字符串返回") @GetMapping("/hello") public String hello(){ return "hellotheganster"; } @ApiOperation("通过id查询") @GetMapping("/mybatis") public List<account> find(@RequestParam(value = "id")int id){ return accountDao.selectByPrimaryKey(id);} @ApiOperation("查询所以") @GetMapping("/my") public List<account> selectAll(){ return accountDao.selectAll(); } /*@GetMapping("/in") public void inAll(@RequestParam(value = "id")int id,@RequestParam(value = "money")int money,@RequestParam(value = "vip")int vip){ accountDao.insertSelective(id,money,vip); }*/ @ApiOperation("插入操作根据id") @GetMapping("/in") public void inAll(account account){ accountDao.insertSelective(account); } @ApiOperation("更新操作根据id") @GetMapping("/up") public void updateSelective(account account){ accountDao.updateSelective(account); } @ApiOperation("删除操作根据id") @GetMapping("/de") public void delete(@RequestParam(value ="id")int peopeleid){ accountDao.delete(peopeleid);//给到mapper 的是peopleid 接受的是id } }
实体类注解为自动生成 如下

运行项目 访问接口地址:http://localhost:8080/swagger-ui.html

测试一下


浙公网安备 33010602011771号