搭建基础后台框架及整合Swagger2及整合mybatisPlus代码器
1、創建父工程管理所有的依賴
?(1)、刪除 src 目錄,指定pom
(2)導入依賴
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.9.RELEASE</version><relativePath/></parent><!--依賴版本管理--><properties><spring-cloud.version>Hoxton.SR5</spring-cloud.version><cloud-alibaba.version>2.2.0.RELEASE</cloud-alibaba.version><mybatis-plus.version>3.3.1</mybatis-plus.version><druid.version>1.1.21</druid.version><kaptcha.version>2.3.2</kaptcha.version><fastjson.version>1.2.8</fastjson.version><commons-lang.version>2.6</commons-lang.version><commons-collections.version>3.2.2</commons-collections.version><commons-io.version>2.6</commons-io.version><httpclientutil.version>1.0.4</httpclientutil.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version></properties><!--依賴聲明--><dependencyManagement><dependencies><!-- spring cloud --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><!--maven不支持多繼承,使用 import 來依賴管理配置--><scope>import</scope></dependency><!-- alibaba 依賴--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency><!--mybatis-plus啟動器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency><!--druid連接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid.version}</version></dependency><!-- Swagger --><dependency><groupId>com.spring4all</groupId><artifactId>swagger-spring-boot-starter</artifactId><version>1.9.1.RELEASE</version></dependency><!-- kaptcha 用于圖形驗證碼 --><dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>${kaptcha.version}</version></dependency><!-- aliyun oss --><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.8.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><!--http請求工具--><dependency><groupId>com.arronlong</groupId><artifactId>httpclientutil</artifactId><version>${httpclientutil.version}</version></dependency><!-- 工具類依賴 --><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>${commons-lang.version}</version></dependency><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>${commons-collections.version}</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>${commons-io.version}</version></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>${java.version}</source><target>${java.version}</target><encoding>${project.build.sourceEncoding}</encoding></configuration></plugin><!--springboot 打包插件--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins><resources><resource><!--編譯時,默認情況下不會將 mapper.xml文件編譯進去,src/main/java 資源文件的路徑,**/*.xml 需要編譯打包的文件類型是xml文件,--><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory></resource></resources></build>2、創建工具類(jhj-blog-utils)子工程
創建子工程的工具包,如果需要注入到Spring容器中,調用,則需要和其他微服務的總包保持一致
?確保被掃描到
比如我的utils工程如下
?子微服務如下
(1)、導入工具類的依賴?
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--mybatis-plus啟動器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId></dependency><!--Druid連接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- 配置處理器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><!--lombok setter,getter--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- swagger--><dependency><groupId>com.spring4all</groupId><artifactId>swagger-spring-boot-starter</artifactId></dependency><!-- aliyun --><!-- aliyun oss--><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId></dependency><!--http請求工具--><!-- 服務遠程調用的依賴--><dependency><groupId>com.arronlong</groupId><artifactId>httpclientutil</artifactId></dependency><!-- 工具類依賴 --><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId></dependency><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId></dependency></dependencies>(2)、創建枚舉類及統一接口進行管理工具類
package com.jhj.blog.utils.enums;import lombok.AllArgsConstructor; import lombok.Getter;@Getter @AllArgsConstructor //有參構造方法 public enum ResultEnum {SUCCESS(20000, "成功"),ERROR(999, "錯誤"),UNAUTHENTICATED(401, "請先通過身份認證"),AUTH_FAIL(1400, "認證失敗"),// token異常TOKEN_PAST(1401, "身份過期,請求重新登錄!"),TOKEN_ERROR(1402, "令牌錯誤"),HEADEA_ERROR(1403, "請求頭錯誤"),AUTH_USERNAME_NONE(1405, "用戶名不能為空"),AUTH_PASSWORD_NONE(1406, "密碼不能為空"),MENU_NO(306, "沒此權限,請聯系管理員!");private Integer code;private String desc; } package com.jhj.blog.utils.base;import com.alibaba.fastjson.JSON; import com.jhj.blog.utils.enums.ResultEnum; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import java.io.Serializable;/*** 用于封裝接口統一響應結果*/ @Data @NoArgsConstructor // 無參構造方法 @AllArgsConstructor // 有參構造方法 public final class Result implements Serializable {private static final Logger logger = LoggerFactory.getLogger(Result.class);private static final long serialVersionUID = 1L;/*** 響應業務狀態碼*/private Integer code;/*** 響應信息*/private String message;/*** 響應中的數據*/private Object data;public static Result ok() {return new Result(ResultEnum.SUCCESS.getCode(), ResultEnum.SUCCESS.getDesc(), null);}public static Result ok(Object data) {return new Result(ResultEnum.SUCCESS.getCode(), ResultEnum.SUCCESS.getDesc(), data);}public static Result ok(String message, Object data) {return new Result(ResultEnum.SUCCESS.getCode(), message, data);}public static Result error(String message) {logger.debug("返回錯誤:code={}, message={}", ResultEnum.ERROR.getCode(), message);return new Result(ResultEnum.ERROR.getCode(), message, null);}public static Result build(int code, String message) {logger.debug("返回結果:code={}, message={}", code, message);return new Result(code, message, null);}public static Result build(ResultEnum resultEnum) {logger.debug("返回結果:code={}, message={}", resultEnum.getCode(), resultEnum.getDesc());return new Result(resultEnum.getCode(), resultEnum.getDesc(), null);}public String toJsonString() {return JSON.toJSONString(this);}}(3)、創建mybatisPlus的page 分頁方法的封裝實體類
package com.jhj.blog.utils.base;import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors;import java.io.Serializable;/*** 請求參數基礎類、帶分頁參數* @param <T>*/ @Accessors(chain = true) //@Accessors(chain = true)在lomBook中級聯操作,setter 方法有返回值 this , // 所以可以連續點Page<T>().setCurrent(this.current).setSize(this.size) @Data public class BaseRequest<T> implements Serializable {// @ApiModelProperty(value = "頁碼", required = true) 注解是 Swagger 提供的,用于生成接口文檔用的,@ApiModelProperty(value = "頁碼", required = true)private long current;@ApiModelProperty(value = "每頁顯示多少條", required = true)private long size;/*** 封裝分頁對象* @return*/@ApiModelProperty(hidden = true) // hidden = true 不在swagger接口文檔中顯示public IPage<T> getPage() { // Page<T> tPage = new Page<>(this.current, this.size);相當于這樣吧return new Page<T>().setCurrent(this.current).setSize(this.size);}}(4)在resourse下面創建 日志配置文件logback.xml?
<?xml version="1.0" encoding="UTF-8"?> <!--夢學谷 www.mengxuegu.com --><configuration><!-- 彩色日志 --><!-- 彩色日志依賴的渲染類 --><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /><conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /><conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /><!-- 彩色日志格式 --><property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/><!-- ch.qos.logback.core.ConsoleAppender 表示控制臺輸出 --><appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"><layout class="ch.qos.logback.classic.PatternLayout"><pattern>${CONSOLE_LOG_PATTERN}</pattern></layout></appender><!--nacos相關日志級別--><logger name="com.alibaba.nacos.client" level="ERROR" additivity="false"/><root level="info"><appender-ref ref="stdout" /></root> </configuration>3、創建接口子工程(jhj-blog-api)
(1)、添加依賴
第一個工具類的依賴,第二個feign的依賴,后期做接口統一調度
<dependencies><dependency><groupId>jhj-blog</groupId><artifactId>jhj-blog-utils</artifactId><version>1.0-SNAPSHOT</version></dependency><!-- feign 調用服務接口 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency></dependencies>(2)現在針對 mxg_category表做個測試
?在jhj-blog-api子項目中添加該表的實體類
package com.jhj.blog.entities;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode;import java.io.Serializable; import java.util.Date;/*** @program: jhj-blog* @ClassName Category* @description:* @author:蔣皓潔* @create: 2021-12-07 16:55* @Version 1.0**/ @ApiModel(value = "Category對象", description = "類別表描述") @Data // lombok 注解,生成 setter,getter等 @TableName("mxg_category") // mybatis-plus注解,對應表名 public class Category implements Serializable {private static final long serialVersionUID = 1L;/*** 主鍵,分布式id*/@ApiModelProperty(value = "主鍵")@TableId(value = "id", type = IdType.ASSIGN_ID)private String id;/*** 分類名稱*/@ApiModelProperty(value = "分類名稱")private String name;/*** 備注*/@ApiModelProperty(value = "備注")private String remark;/*** 狀態(1:正常,0:禁用)*/@ApiModelProperty(value = "狀態(1:正常,0:禁用)")private Integer status;/*** 排序*/@ApiModelProperty(value = "排序")private Integer sort;/*** 創建時間*/@ApiModelProperty(value = "創建時間")private Date createDate;/*** 更新時間*/@ApiModelProperty(value = "更新時間")private Date updateDate;/*** <p>* 標簽表* </p>** @author jiangHaoJie* @since 2021-12-08*/}4、創建子工程 (jhj-blog-article)做核心接口處理
(1)、添加pom依賴
添加了jhj-blog-api依賴 因為jhj-blog-api依賴中包含jhj-blog-utils依賴,所以不用引入
<dependencies><dependency><groupId>jhj-blog</groupId><artifactId>jhj-blog-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--熱部署 ctrl+f9--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>(2)、添加application.yml
swagger:title: 博客系統接口文檔description: 博客系統-分類&標簽&文章&廣告管理接口exclude-path: /error # 剔除Springboot自定義的error請求server:port: 8001servlet:context-path: /article # 上下文件路徑,請求前綴 ip:port/articlespring:application:name: article-server # 應用名# 數據源配置datasource:username: rootpassword: rooturl: jdbc:mysql://127.0.0.1:3306/mxg_blog_article?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true#mysql8版本以上驅動包指定新的驅動類driver-class-name: com.mysql.cj.jdbc.Driver# 數據源其他配置, 在 DruidConfig配置類中手動綁定initialSize: 8minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALmybatis-plus:type-aliases-package: com.jhj.blog.entities# xxxMapper.xml 路徑mapper-locations: classpath*:com/jhj/blog/article/mapper/**/*.xml# 日志級別,會打印sql語句 logging:level:com.jhj.blog.article.mapper: debug其中 下面這個表示配置swagger的統一配置項目的標題等,去除springboot中自帶的error接口
swagger:title: 博客系統接口文檔description: 博客系統-分類&標簽&文章&廣告管理接口exclude-path: /error # 剔除Springboot自定義的error請求配置mybatisPlus的實體類路徑,和mapper的掃描路徑?
mybatis-plus:type-aliases-package: com.jhj.blog.entities# xxxMapper.xml 路徑mapper-locations: classpath*:com/jhj/blog/article/mapper/**/*.xml配置日志打印SQL的mapper路徑?
logging:level:com.jhj.blog.article.mapper: debug(3)配置mybatisPlus分頁配置
@MapperScan("com.jhj.blog.article.mapper")//掃描指定的Map接口
@Configuration//標注配置類
@EnableTransactionManagement ?//開啟事務管理
(4) mxg_category表的mapper層
package com.jhj.blog.article.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.jhj.blog.entities.Category;/*** <p>* 文章分類表 Mapper 接口* </p>* @author*/ public interface CategoryMapper extends BaseMapper<Category> { }(5)server層
package com.jhj.blog.article.service;import com.baomidou.mybatisplus.extension.service.IService; import com.jhj.blog.article.req.CategoryREQ; import com.jhj.blog.entities.Category; import com.jhj.blog.utils.base.Result;/*** 文章分類*/ public interface ICategoryService extends IService<Category> {//分頁條件查詢分類信息Result queryPage(CategoryREQ req);/*** 獲取所有正常狀態的分類 status==1* findAllNormal*/Result findAllNormal(); } package com.jhj.blog.article.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jhj.blog.article.mapper.CategoryMapper; import com.jhj.blog.article.req.CategoryREQ; import com.jhj.blog.article.service.ICategoryService; import com.jhj.blog.entities.Category; import com.jhj.blog.utils.base.Result; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Service;import java.util.Date;/*** @program: jhj-blog* @ClassName CategoryServiceImpl* @description:* @author:蔣皓潔* @create: 2021-12-08 14:40* @Version 1.0* 繼承ServiceImpl傳入mapper,和實體entity**/ @Service public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements ICategoryService {@Overridepublic Result queryPage(CategoryREQ req) {QueryWrapper<Category> categoryQueryWrapper = new QueryWrapper<>();//分類名稱if (StringUtils.isNotEmpty(req.getName())) {categoryQueryWrapper.like("name", req.getName());}//分類狀態if (req.getStatus() != null) {categoryQueryWrapper.eq("status", req.getStatus());} // status 1正常 0 異常,降序排列(由高到底)orderByDesc,再對sort進行升序排列categoryQueryWrapper.orderByDesc("status").orderByAsc("sort");IPage<Category> categoryIPage = baseMapper.selectPage(req.getPage(), categoryQueryWrapper);return Result.ok(categoryIPage);}@Overridepublic Result findAllNormal() {QueryWrapper<Category> wrapper = new QueryWrapper<>();wrapper.eq("status", 1); // 1 正常,0 禁用return Result.ok(baseMapper.selectList(wrapper));}@Overridepublic boolean updateById(Category entity) {entity.setUpdateDate(new Date()); // super調用父類的實現方法return super.updateById(entity);} }重寫了父類的?updateById的方法,將修改時候,設置最新時間,再返回父類的super.updateById(entity);方法
@Overridepublic boolean updateById(Category entity) {entity.setUpdateDate(new Date()); // super調用父類的實現方法return super.updateById(entity);}(6)controller層
package com.jhj.blog.article.controller;import com.jhj.blog.article.req.CategoryREQ; import com.jhj.blog.article.service.ICategoryService; import com.jhj.blog.entities.Category; import com.jhj.blog.utils.base.Result; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*;/*** @program: jhj-blog* @ClassName CategoryController* @description:* @author:蔣皓潔* @create: 2021-12-08 15:05* @Version 1.0**/ @Api(value = "分類管理接口", description = "顯示分類管理的增刪改查") @RestController//所有的方法都會返回Json字符串進行相應 @RequestMapping("/category") public class CategoryController {@Autowiredprivate ICategoryService iCategoryService;@ApiOperation("根據分類名稱及狀態查詢分類列表接口")@PostMapping("/search")public Result search(@RequestBody CategoryREQ req) {return iCategoryService.queryPage(req);}@ApiOperation("根據ID查詢分類接口")@ApiImplicitParam(name = "id", value = "類別ID", required = true)@GetMapping("/{id}")public Result view(@PathVariable("id") String id) {Category byId = iCategoryService.getById(id);return Result.ok(byId);}@ApiOperation("更新分類信息")@PutMappingpublic Result update(@RequestBody Category category) {iCategoryService.updateById(category);return Result.ok();}@ApiOperation("新增分類信息接口")@PostMappingpublic Result save(@RequestBody Category category) {boolean save = iCategoryService.save(category);if (save) {return Result.ok();} else {return Result.error("更新失敗");}}@ApiOperation("刪除分類信息接口")@ApiImplicitParam(name = "id", value = "類別ID", required = true)@DeleteMapping("/{id}")public Result delete(@PathVariable("id") String id) {boolean b = iCategoryService.removeById(id);if (b) {return Result.ok();} else {return Result.error("刪除失敗");}}/*** 查詢所有正常的類別* @return*/@ApiOperation("獲取所有正常狀態的分類接口")@GetMapping("/list")public Result list() {return iCategoryService.findAllNormal();}}5、Swagger的使用
1、依賴
因為前面父Pom文件加入了下面這個依賴,所以在子工程(jhj-blog-article)不用添加其他依賴
<dependency><groupId>com.spring4all</groupId><artifactId>swagger-spring-boot-starter</artifactId></dependency>2、啟動類添加? @EnableSwagger2Doc 注解
@SpringBootApplication @EnableSwagger2Doc public class ArticleApplication {public static void main(String[] args) {SpringApplication.run(ArticleApplication.class, args);} }3、請求實體類注解
@ApiModel:用在請求參數是對象上,描述該對象類的作用
@ApiModelProperty:用在請求參數是對象的屬性上,描述對象屬性的作用。 value:屬性的描述 hidden:是否是查詢條件屬性, false:(默認值)在api文檔顯示,作為查詢條件;true 隱藏,不是條件屬性
@Data @Accessors(chain = true) //swagger的注解 @ApiModel(value = "CategoryREQ條件對象", description = "類別查詢條件") public class CategoryREQ extends BaseRequest<Category> {/*** 分類名稱*/@ApiModelProperty(value = "分類名稱")private String name;/*** 狀態(1:正常,0:禁用)*/@ApiModelProperty(value = "狀態")private Integer status; }4、接口注解
(1)接口類注解
@Api:用在 Controller 類上,描述該類的作用,注解參數: value="簡要說明" description="詳細描述該類的作用"
@Api(value = "分類管理接口", description = "顯示分類管理的增刪改查") @RestController//所有的方法都會返回Json字符串進行相應 @RequestMapping("/category") public class CategoryController {(2)方法上注解
?@ApiOperation:用在 Controller 請求方法上,描述方法的作用。
@ApiOperation("根據分類名稱及狀態查詢分類列表接口")@PostMapping("/search")public Result search(@RequestBody CategoryREQ req) {return iCategoryService.queryPage(req);}@ApiImplicitParams:用在請求方法上,對多個請求參數增加描述。
@ApiImplicitParam:可單獨使用,或在 @ApiImplicitParams 中使用,給方法的一個請求參數增加描述。
name:參數名
value:描述參數的作用
dataType:參數類型,參數類型,默認String,其它值 dataType="Integer"
defaultValue:參數默認值
required:參數是否必傳(true/false)
paramTpye:指定參數放在哪些地方(header/query/path/body/form)
? ? ? header :參數在request headers 里邊提交@RequestHeader
? ? ? query :直接跟參數完成自動映射賦值 @RequestParam
? ? ? path :以路徑變量的形式提交數據 @PathVariable
? ? ? body :以流的形式提交 僅支持POST(不常用) form :以form表單的形式提交 僅支持POST (不常用)
@ApiOperation("根據ID查詢分類接口")@ApiImplicitParam(name = "id", value = "類別ID", required = true)@GetMapping("/{id}")public Result view(@PathVariable("id") String id) {Category byId = iCategoryService.getById(id);return Result.ok(byId);} // 請求方法有多個請求參數 size, current @ApiImplicitParams({@ApiImplicitParam(name="current", value="頁碼", required=true, paramType="path", dataType="int"),@ApiImplicitParam(name="size", value="每頁記錄數", required=true, paramType="path", dataType="int") }) @ApiOperation("根據分類名稱與狀態查詢分類列表接口") @PostMapping("/search/{current}/{size}") Result search(@RequestBody CategoryREQ req,@PathVariable int current, @PathVariable int size);5、啟動項目
訪問地址:http://127.0.0.1:8001/article/swagger-ui.html
?
?以新增接口為例
@ApiOperation("新增分類信息接口")@PostMappingpublic Result save(@RequestBody Category category) {boolean save = iCategoryService.save(category);if (save) {return Result.ok();} else {return Result.error("更新失敗");}}查看傳入對象字段屬性?
?
?
6、創建代碼生成器子工程(jhj-blog-generator)
1、添加依賴,(1)、工具類依賴,(2)、mybatisPlus代碼生成器依賴 (3)、模本引擎依賴
<dependencies><dependency><groupId>jhj-blog</groupId><artifactId>jhj-blog-utils</artifactId><version>1.0-SNAPSHOT</version></dependency><!-- 代碼生成器核心依賴 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.3.2</version></dependency><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId></dependency></dependencies>2、添加代碼生成器
package com.jhj.generator;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; import com.baomidou.mybatisplus.core.toolkit.StringUtils; 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 com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;import java.util.Scanner;// 執行 main 方法控制臺輸入模塊表名回車自動生成對應項目目錄中 public class CodeGenerator {// 生成的代碼放到哪個工程中private static String PROJECT_NAME = "jhj-blog-article";// 數據庫名稱private static String DATABASE_NAME = "mxg_blog_article";// 子包名private static String MODULE_NAME = "article";public static void main(String[] args) {// 代碼生成器AutoGenerator mpg = new AutoGenerator();// 數據源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl("jdbc:mysql://localhost:3306/"+ DATABASE_NAME +"?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8");dsc.setDriverName("com.mysql.cj.jdbc.Driver");dsc.setUsername("root");dsc.setPassword("root");mpg.setDataSource(dsc);// 全局配置GlobalConfig gc = new GlobalConfig();String projectPath = System.getProperty("user.dir") + "/";gc.setOutputDir(projectPath + PROJECT_NAME +"/src/main/java");gc.setIdType(IdType.ASSIGN_ID); // 分布式idgc.setAuthor("jiangHaoJie");gc.setFileOverride(true); //覆蓋現有的,覆蓋代碼gc.setOpen(false); //是否生成后打開gc.setDateType(DateType.ONLY_DATE);gc.setSwagger2(true); //實體屬性 Swagger2 注解mpg.setGlobalConfig(gc);// 包配置PackageConfig pc = new PackageConfig();pc.setParent("com.jhj.blog"); //父包名pc.setController(MODULE_NAME+".controller"); // com.mengxuegu.blog.aritcle.controllerpc.setService(MODULE_NAME+".service");pc.setServiceImpl(MODULE_NAME+".service.impl");pc.setMapper(MODULE_NAME+".mapper");pc.setXml(MODULE_NAME+".mapper.xml");pc.setEntity("entities");//實體類存儲包名 com.mengxuegu.blog.entitiesmpg.setPackageInfo(pc);// 策略配置StrategyConfig strategy = new StrategyConfig();strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);strategy.setEntityLombokModel(true); //使用lombokstrategy.setEntitySerialVersionUID(true);// 實體類的實現接口Serializablestrategy.setRestControllerStyle(true); // @RestControllerstrategy.setInclude(scanner("表名,多個英文逗號分割").split(","));strategy.setControllerMappingHyphenStyle(true);strategy.setTablePrefix("mxg_"); // 去掉表前綴mpg.setStrategy(strategy);mpg.setTemplateEngine(new FreemarkerTemplateEngine());mpg.execute();}/*** <p>* 讀取控制臺內容* </p>*/public static String scanner(String tip) {Scanner scanner = new Scanner(System.in);StringBuilder help = new StringBuilder();help.append("請輸入" + tip + ":");System.out.println(help.toString());if (scanner.hasNext()) {String ipt = scanner.next();if (StringUtils.isNotBlank(ipt)) {return ipt;}}throw new MybatisPlusException("請輸入正確的" + tip + "!");}}3、點擊運行?
總結
以上是生活随笔為你收集整理的搭建基础后台框架及整合Swagger2及整合mybatisPlus代码器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NLP中遇到的各类Attention结构
- 下一篇: [Hb-XI] 标志寄存器 cmp jb