一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

2021-08-21 15:31陳彥斌 Java教程

這篇文章主要介紹了SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

導讀

  • Lombok:可以讓你的POJO代碼特別簡潔,不止簡單在BO/VO/DTO/DO等大量使用,還有設計模式,對象對比等
  • MybatisPlus:增加版Mybatis,基礎的數據庫CRUD、分頁等可以直接生成使用,避免了大量的重復低效代碼,還有數據庫自動Java類,sql文件等等,比傳統的更賤簡介易用
  • SwaggerUI:接口文檔自動生成,對接前端和測試更加方便,基于業界的OpennApi規范,采用Swagger3.x版本。

技術棧

  SpringBoot2.4+ MybatisPlus+Lombok+Swagger3.x+jdk8+IDEA

在線構建項目

點我直達

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

什么是lombok

官網

點我直達

  一個優秀的Java代碼庫,簡化了Java的編碼,為Java代碼的精簡提供了一種方式

添加依賴

  1. <!--lombok-->
  2. <dependency>
  3. <groupId>org.projectlombok</groupId>
  4. <artifactId>lombok</artifactId>
  5. <version>1.18.16</version>
  6. <!--scope=provided,說明它是在編譯階段生效,不需要打入包中,Lombok在編譯期將帶Lombok注解的Java文件正確編譯為完整的Class文件-->
  7. <scope>provided</scope>
  8. </dependency>

常見注解@Getter/@Setter#

  • 作用類上,生成所有成員變量的getter/setter方法
  • 作用于成員變量上,生成該成員變量的getter/setter方法
  • 方法控制訪問級別set和get注解加上@Getter(AccessLevel.PROTECTED)

編譯查看字節碼

  1. mvn compile

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

  1. package com.ybchen.shopmanager.model;
  2.  
  3. import lombok.AccessLevel;
  4. import lombok.Getter;
  5. import lombok.Setter;
  6.  
  7. /**
  8. * @Description:
  9. * @Author:chenyanbin
  10. * @Date:2021/3/2 下午9:43
  11. * @Versiion:1.0
  12. */
  13. @Getter
  14. @Setter
  15. public class User {
  16. //不想生成get方法
  17. @Getter(AccessLevel.NONE)
  18. int id;
  19. //只會去生成get
  20. final String name = "alex";
  21. String phone;
  22. //靜態成員變量不會生成set/get方法
  23. static final String pwd = "123";
  24. }

@NonNull

作用于方法上或者屬性,用于非空判斷,如果為空則拋異常

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

@NoArgsContructor

生成無參構造器

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

@AllArgsConstructor

生成全參構造器

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

@RequiredArgsConstructor

指定參數的構造函數,有以下的特征的字段

  • final類型未被初始化的屬性,標記了@NonNull的屬性
  • 注意:@NoArgsConstructor不能添加

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

@ToStringList或者其他集合調試不方便控制臺或者日志輸出對象,默認打印的是內存地址作用于類,覆蓋默認的toString()方法

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

不包括某個字段

@ToString(exclude={"age"})

只輸出某個字段

@ToString(of={"name"})

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

為什么對象要重寫hashcode和equal方法

HashCode方法

  • 頂級類Object里面的方法,所有類都是繼承Object的,返回值Int類型
  • 根據一定的hash規則(存儲地址,字段,或者長度等),映射成一個數值,即散列值

Equals方法

  • 頂級類Object里面的方法,所有類都是繼承Object的,返回值boolean類型
  • 根據自定義的匹配規則,用于匹配兩個對象是否一樣,一般邏輯如下

1、判斷地址是否一樣
2、非空判斷和class類型判斷
3、強轉
4、對象里面的字段一一匹配

解析

  如果兩個對象相等,那么它們的hashCode()值一定相同。如果兩個對象hashCode()相等,它們并不一定相等。在散列表中hashCode()相等,即兩個鍵值的哈希值相等。然后哈希值相等,并不一定得出鍵值對相等,就出現所謂的哈希沖突場景,還需要equals方法判斷對象是否相等。

應用場景

  當向集合中插入對象時,如何判別在集合中是否已經存在該對象,比如Set確保存儲對象的唯一值,并判斷是否同一個對象呢?

  1. 依據hashCodeequals進行判斷
  2. 所以Set存儲的對象必須重寫這兩個方法,判斷兩個對象是否一樣
  3. 首先判斷插入對象的hashCode值是否存在,hashCode值不存在則直接插入集合;值存在則還需要判斷equals方法判斷對象是否相等

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

@EqualsAndHashCode

作用于類,覆蓋默認的equals和hashCode,作用于全部屬性

不包含某個屬性

@EqualsAndHashCode(exclude={"id"})

只輸出某個屬性

@EqualsAndHashCode(of={"id"})

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

@Data

作用于類上,是以下注解的集合

@ToString

@EqualsAndHashCode

@Getter

@Setter

@RequiredArgsConstructor

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

@Builder場景:當一個bean類重載了多個構造方法時,并且參數隨機使用時,考慮使用構造者模式

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

@Lof/@Slf4j作用于類上,生成日志變量,用于記錄日志

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

MybatisPlus介紹

  • 官網:點我直達
  • 是一個mybatis的增強工具,在Mybatis的基礎上只做強增不做改變,為簡化開發,提高效率

數據庫腳本

  1. /*
  2. Navicat Premium Data Transfer
  3.  
  4. Source Server : localhost
  5. Source Server Type : MySQL
  6. Source Server Version : 50728
  7. Source Host : localhost:3306
  8. Source Schema : shop
  9.  
  10. Target Server Type : MySQL
  11. Target Server Version : 50728
  12. File Encoding : 65001
  13.  
  14. Date: 04/03/2021 22:17:20
  15. */
  16.  
  17. SET NAMES utf8mb4;
  18. SET FOREIGN_KEY_CHECKS = 0;
  19.  
  20. -- ----------------------------
  21. -- Table structure for address
  22. -- ----------------------------
  23. DROP TABLE IF EXISTS `address`;
  24. CREATE TABLE `address` (
  25. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  26. `user_id` bigint(20) DEFAULT NULL COMMENT '用戶id',
  27. `default_status` int(1) DEFAULT NULL COMMENT '是否默認收貨地址:0->否;1->是',
  28. `receive_name` varchar(64) DEFAULT NULL COMMENT '收發貨人姓名',
  29. `phone` varchar(64) DEFAULT NULL COMMENT '收貨人電話',
  30. `province` varchar(64) DEFAULT NULL COMMENT '省/直轄市',
  31. `city` varchar(64) DEFAULT NULL COMMENT '市',
  32. `region` varchar(64) DEFAULT NULL COMMENT '區',
  33. `detail_address` varchar(200) DEFAULT NULL COMMENT '詳細地址',
  34. `create_time` datetime DEFAULT NULL,
  35. PRIMARY KEY (`id`)
  36. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='電商-公司收發貨地址表';
  37.  
  38. -- ----------------------------
  39. -- Records of address
  40. -- ----------------------------
  41. BEGIN;
  42. COMMIT;
  43.  
  44. -- ----------------------------
  45. -- Table structure for banner
  46. -- ----------------------------
  47. DROP TABLE IF EXISTS `banner`;
  48. CREATE TABLE `banner` (
  49. `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  50. `img` varchar(524) DEFAULT NULL COMMENT '圖片',
  51. `url` varchar(524) DEFAULT NULL COMMENT '跳轉地址',
  52. `weight` int(11) DEFAULT NULL COMMENT '權重',
  53. `version` int(11) DEFAULT '1',
  54. `deleted` int(11) DEFAULT '0' COMMENT '0是未刪除,1是已經刪除',
  55. PRIMARY KEY (`id`)
  56. ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4;
  57.  
  58. -- ----------------------------
  59. -- Records of banner
  60. -- ----------------------------
  61. BEGIN;
  62. INSERT INTO `banner` VALUES (1, 'https://images.cnblogs.com/cnblogs_com/chenyanbin/1560326/o_qianxun.jpg', 'https://www.cnblogs.com/chenyanbin/', 1, 2, 1);
  63. INSERT INTO `banner` VALUES (2, 'https://images.cnblogs.com/cnblogs_com/chenyanbin/1560326/o_qianxun.jpg', 'https://www.cnblogs.com/chenyanbin/', 3, 1, 0);
  64. INSERT INTO `banner` VALUES (3, 'https://images.cnblogs.com/cnblogs_com/chenyanbin/1560326/o_qianxun.jpg', 'https://www.cnblogs.com/chenyanbin/', 2, 1, 0);
  65. INSERT INTO `banner` VALUES (7, 'werw', 'https://images.cnblogs.com/cnblogs_com/chenyanbin/1560326/o_qianxun.jpg', 2, 1, 0);
  66. INSERT INTO `banner` VALUES (8, '666666', 'https://images.cnblogs.com/cnblogs_com/chenyanbin/1560326/o_qianxun.jpg', 2, 1, 0);
  67. INSERT INTO `banner` VALUES (9, 'sdfds', 'https://images.cnblogs.com/cnblogs_com/chenyanbin/1560326/o_qianxun.jpg', 2, 1, 0);
  68. INSERT INTO `banner` VALUES (10, '323232', 'https://images.cnblogs.com/cnblogs_com/chenyanbin/1560326/o_qianxun.jpg', 2, 1, 0);
  69. INSERT INTO `banner` VALUES (11, '532', 'https://images.cnblogs.com/cnblogs_com/chenyanbin/1560326/o_qianxun.jpg', 2, 1, 0);
  70. INSERT INTO `banner` VALUES (12, '6666', 'https://images.cnblogs.com/cnblogs_com/chenyanbin/1560326/o_qianxun.jpg', 2, 1, 0);
  71. COMMIT;
  72.  
  73. -- ----------------------------
  74. -- Table structure for coupon
  75. -- ----------------------------
  76. DROP TABLE IF EXISTS `coupon`;
  77. CREATE TABLE `coupon` (
  78. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  79. `category` varchar(11) DEFAULT NULL COMMENT '優惠卷類型[NEW_USER注冊贈券,TASK任務卷,PROMOTION促銷劵]',
  80. `publish` varchar(11) DEFAULT NULL COMMENT '發布狀態, PUBLISH發布,DRAFT草稿,OFFLINE下線',
  81. `coupon_img` varchar(524) DEFAULT NULL COMMENT '優惠券圖片',
  82. `coupon_title` varchar(128) DEFAULT NULL COMMENT '優惠券標題',
  83. `price` decimal(16,2) DEFAULT NULL COMMENT '抵扣價格',
  84. `user_limit` int(11) DEFAULT NULL COMMENT '每人限制張數',
  85. `start_time` datetime DEFAULT NULL COMMENT '優惠券開始有效時間',
  86. `end_time` datetime DEFAULT NULL COMMENT '優惠券失效時間',
  87. `publish_count` int(11) DEFAULT NULL COMMENT '優惠券總量',
  88. `stock` int(11) DEFAULT '0' COMMENT '庫存',
  89. `add_one` int(11) DEFAULT NULL COMMENT '是否疊加0是不行,1是可以',
  90. `create_time` datetime DEFAULT NULL,
  91. `condition_price` decimal(16,2) DEFAULT NULL COMMENT '滿多少才可以使用',
  92. PRIMARY KEY (`id`)
  93. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  94.  
  95. -- ----------------------------
  96. -- Records of coupon
  97. -- ----------------------------
  98. BEGIN;
  99. COMMIT;
  100.  
  101. -- ----------------------------
  102. -- Table structure for product
  103. -- ----------------------------
  104. DROP TABLE IF EXISTS `product`;
  105. CREATE TABLE `product` (
  106. `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT,
  107. `title` varchar(128) DEFAULT NULL COMMENT '標題',
  108. `cover_img` varchar(128) DEFAULT NULL COMMENT '封面圖',
  109. `detail` varchar(256) DEFAULT '' COMMENT '詳情',
  110. `old_price` decimal(16,2) DEFAULT NULL COMMENT '老價格',
  111. `price` decimal(16,2) DEFAULT NULL COMMENT '新價格',
  112. `stock` int(11) DEFAULT NULL COMMENT '庫存',
  113. `create_time` datetime DEFAULT NULL COMMENT '創建時間',
  114. `lock_stock` int(11) DEFAULT '0' COMMENT '鎖定庫存',
  115. PRIMARY KEY (`id`)
  116. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
  117.  
  118. -- ----------------------------
  119. -- Records of product
  120. -- ----------------------------
  121. BEGIN;
  122. COMMIT;
  123.  
  124. -- ----------------------------
  125. -- Table structure for product_order
  126. -- ----------------------------
  127. DROP TABLE IF EXISTS `product_order`;
  128. CREATE TABLE `product_order` (
  129. `id` bigint(11) NOT NULL AUTO_INCREMENT,
  130. `out_trade_no` varchar(64) DEFAULT NULL COMMENT '訂單唯一標識',
  131. `state` varchar(11) DEFAULT NULL COMMENT 'NEW 未支付訂單,PAY已經支付訂單,CANCEL超時取消訂單',
  132. `create_time` datetime DEFAULT NULL COMMENT '訂單生成時間',
  133. `total_fee` decimal(16,2) DEFAULT NULL COMMENT '訂單總金額',
  134. `pay_fee` decimal(16,2) DEFAULT NULL COMMENT '訂單實際支付價格',
  135. `pay_type` varchar(64) DEFAULT NULL COMMENT '支付類型,微信-銀行-支付寶',
  136. `nickname` varchar(64) DEFAULT NULL COMMENT '昵稱',
  137. `head_img` varchar(524) DEFAULT NULL COMMENT '頭像',
  138. `user_id` int(11) DEFAULT NULL COMMENT '用戶id',
  139. `del` int(5) DEFAULT '0' COMMENT '0表示未刪除,1表示已經刪除',
  140. `update_time` datetime DEFAULT NULL COMMENT '更新時間',
  141. `order_type` varchar(32) DEFAULT NULL COMMENT '訂單類型 DAILY普通單,PROMOTION促銷訂單',
  142. `receiver_address` varchar(1024) DEFAULT NULL COMMENT '收貨地址 json存儲',
  143. PRIMARY KEY (`id`)
  144. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  145.  
  146. -- ----------------------------
  147. -- Records of product_order
  148. -- ----------------------------
  149. BEGIN;
  150. COMMIT;
  151.  
  152. -- ----------------------------
  153. -- Table structure for product_order_item
  154. -- ----------------------------
  155. DROP TABLE IF EXISTS `product_order_item`;
  156. CREATE TABLE `product_order_item` (
  157. `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT,
  158. `product_order_id` bigint(11) DEFAULT NULL COMMENT '訂單號',
  159. `out_trade_no` varchar(32) DEFAULT NULL,
  160. `product_id` bigint(11) DEFAULT NULL COMMENT '產品id',
  161. `product_name` varchar(128) DEFAULT NULL COMMENT '商品名稱',
  162. `product_img` varchar(524) DEFAULT NULL COMMENT '商品圖片',
  163. `buy_num` int(11) DEFAULT NULL COMMENT '購買數量',
  164. `create_time` datetime DEFAULT NULL,
  165. `total_fee` decimal(16,2) DEFAULT NULL COMMENT '購物項商品總價格',
  166. `pay_fee` decimal(16,0) DEFAULT NULL COMMENT '購物項商品支付總價格',
  167. PRIMARY KEY (`id`)
  168. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  169.  
  170. -- ----------------------------
  171. -- Records of product_order_item
  172. -- ----------------------------
  173. BEGIN;
  174. COMMIT;
  175.  
  176. -- ----------------------------
  177. -- Table structure for user
  178. -- ----------------------------
  179. DROP TABLE IF EXISTS `user`;
  180. CREATE TABLE `user` (
  181. `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT,
  182. `name` varchar(128) DEFAULT NULL COMMENT '昵稱',
  183. `pwd` varchar(124) DEFAULT NULL COMMENT '密碼',
  184. `head_img` varchar(524) DEFAULT NULL COMMENT '頭像',
  185. `slogan` varchar(524) DEFAULT NULL COMMENT '用戶簽名',
  186. `sex` tinyint(2) DEFAULT '1' COMMENT '0表示女,1表示男',
  187. `points` int(10) DEFAULT '0' COMMENT '積分',
  188. `create_time` datetime DEFAULT NULL,
  189. `mail` varchar(64) DEFAULT NULL COMMENT '郵箱',
  190. `secret` varchar(12) DEFAULT NULL COMMENT '鹽,用于個人敏感信息處理',
  191. PRIMARY KEY (`id`),
  192. UNIQUE KEY `mail_idx` (`mail`)
  193. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  194.  
  195. -- ----------------------------
  196. -- Records of user
  197. -- ----------------------------
  198. BEGIN;
  199. COMMIT;
  200.  
  201. SET FOREIGN_KEY_CHECKS = 1;

pom.xml

  1. <!--mysql-->
  2. <dependency>
  3. <groupId>mysql</groupId>
  4. <artifactId>mysql-connector-java</artifactId>
  5. </dependency>
  6. <!--mybatis plus和spring boot整合-->
  7. <dependency>
  8. <groupId>com.baomidou</groupId>
  9. <artifactId>mybatis-plus-boot-starter</artifactId>
  10. <version>3.4.0</version>
  11. </dependency>
  12. <?xml version="1.0" encoding="UTF-8"?>
  13. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  14. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  15. <modelVersion>4.0.0</modelVersion>
  16. <parent>
  17. <groupId>org.springframework.boot</groupId>
  18. <artifactId>spring-boot-starter-parent</artifactId>
  19. <version>2.4.3</version>
  20. <relativePath/> <!-- lookup parent from repository -->
  21. </parent>
  22. <groupId>com.ybchen</groupId>
  23. <artifactId>shop-manager</artifactId>
  24. <version>0.0.1-SNAPSHOT</version>
  25. <name>shop-manager</name>
  26. <description>Demo project for Spring Boot</description>
  27. <properties>
  28. <java.version>1.8</java.version>
  29. </properties>
  30. <dependencies>
  31. <dependency>
  32. <groupId>org.springframework.boot</groupId>
  33. <artifactId>spring-boot-starter-web</artifactId>
  34. </dependency>
  35.  
  36. <dependency>
  37. <groupId>org.springframework.boot</groupId>
  38. <artifactId>spring-boot-starter-test</artifactId>
  39. <scope>test</scope>
  40. </dependency>
  41. <!--lombok-->
  42. <dependency>
  43. <groupId>org.projectlombok</groupId>
  44. <artifactId>lombok</artifactId>
  45. <version>1.18.16</version>
  46. <!--scope=provided,說明它是在編譯階段生效,不需要打入包中,Lombok在編譯期將帶Lombok注解的Java文件正確編譯為完整的Class文件-->
  47. <scope>provided</scope>
  48. </dependency>
  49. <!--mysql-->
  50. <dependency>
  51. <groupId>mysql</groupId>
  52. <artifactId>mysql-connector-java</artifactId>
  53. </dependency>
  54. <!--mybatis plus和spring boot整合-->
  55. <dependency>
  56. <groupId>com.baomidou</groupId>
  57. <artifactId>mybatis-plus-boot-starter</artifactId>
  58. <version>3.4.0</version>
  59. </dependency>
  60. </dependencies>
  61.  
  62. <build>
  63. <plugins>
  64. <plugin>
  65. <groupId>org.springframework.boot</groupId>
  66. <artifactId>spring-boot-maven-plugin</artifactId>
  67. </plugin>
  68. </plugins>
  69. </build>
  70.  
  71. <!-- 代碼庫 -->
  72. <repositories>
  73. <repository>
  74. <id>maven-ali</id>
  75. <url>http://maven.aliyun.com/nexus/content/groups/public//</url>
  76. <releases>
  77. <enabled>true</enabled>
  78. </releases>
  79. <snapshots>
  80. <enabled>true</enabled>
  81. <updatePolicy>always</updatePolicy>
  82. <checksumPolicy>fail</checksumPolicy>
  83. </snapshots>
  84. </repository>
  85. </repositories>
  86. <pluginRepositories>
  87. <pluginRepository>
  88. <id>public</id>
  89. <name>aliyun nexus</name>
  90. <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  91. <releases>
  92. <enabled>true</enabled>
  93. </releases>
  94. <snapshots>
  95. <enabled>false</enabled>
  96. </snapshots>
  97. </pluginRepository>
  98. </pluginRepositories>
  99. </project>

完整pom.xml配置文件

application.properties

  1. # 端口號
  2. server.port=9999
  3. #===========數據庫相關=============
  4. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  5. spring.datasource.url=jdbc:mysql://127.0.0.1/shop?useUnicode=true&characterEncoding=utf-8&useSSL=false
  6. spring.datasource.username=root
  7. spring.datasource.password=root

配置SpringBoot掃描路徑

  啟動類上添加:@MapperScan("Mapper全包路徑")

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

SpringBoot整合MybatisPlus

統一接口返回協議

  1. package com.ybchen.shopmanager.utils;
  2.  
  3. import lombok.AllArgsConstructor;
  4. import lombok.Data;
  5. import lombok.NoArgsConstructor;
  6.  
  7. import java.io.Serializable;
  8.  
  9. @Data
  10. @AllArgsConstructor
  11. @NoArgsConstructor
  12. public class JsonData implements Serializable {
  13. /**
  14. * 狀態碼 0 表示成功,1 表示處理中,-1表示失敗
  15. */
  16. private Integer code;
  17. /**
  18. * 數據
  19. */
  20. private Object data;
  21. /**
  22. * 描述信息
  23. */
  24. private String msg;
  25.  
  26. /**
  27. * 成功,無傳入數據
  28. *
  29. * @return
  30. */
  31. public static JsonData buildSuccess() {
  32. return new JsonData(0, null, null);
  33. }
  34.  
  35. /**
  36. * 成功,有傳入數據
  37. *
  38. * @param data 數據
  39. * @return
  40. */
  41. public static JsonData buildSuccess(Object data) {
  42. return new JsonData(0, data, null);
  43. }
  44.  
  45. /**
  46. * 失敗,有返回錯誤信息
  47. *
  48. * @param msg 描述信息
  49. * @return
  50. */
  51. public static JsonData buildError(String msg) {
  52. return new JsonData(-1, null, msg);
  53. }
  54.  
  55. /**
  56. * 失敗,有狀態碼,描述信息
  57. *
  58. * @param code 狀態碼
  59. * @param msg 描述信息
  60. * @return
  61. */
  62. public static JsonData buildError(Integer code, String msg) {
  63. return new JsonData(code, null, msg);
  64. }
  65.  
  66. /**
  67. * 是否返回成功
  68. * @param jsonData
  69. * @return
  70. */
  71. public static boolean isSuccess(JsonData jsonData) {
  72. return jsonData.getCode() == 0;
  73. }
  74. }

實體類

  1. package com.ybchen.shopmanager.model;
  2.  
  3. import com.baomidou.mybatisplus.annotation.TableName;
  4. import lombok.Data;
  5.  
  6. /**
  7. * @Description:輪播圖
  8. * @Author:chenyanbin
  9. * @Date:2021/3/4 下午11:00
  10. * @Versiion:1.0
  11. */
  12. @Data
  13. //數據庫表名
  14. @TableName("banner")
  15. public class BannerDO {
  16. /**
  17. * 主鍵
  18. */
  19. private Integer id;
  20. /**
  21. * 圖片
  22. */
  23. private String img;
  24. /**
  25. * url跳轉地址
  26. */
  27. private String url;
  28. /**
  29. * 權重
  30. */
  31. private Integer weight;
  32. /**
  33. * 版本號
  34. */
  35. private Integer version;
  36. /**
  37. * 0是未刪除,1是已經刪除
  38. */
  39. private Integer deleted;
  40. }

service

  1. package com.ybchen.shopmanager.service;
  2.  
  3. import com.ybchen.shopmanager.model.BannerDO;
  4.  
  5. import java.util.List;
  6.  
  7. public interface BannerService {
  8. List<BannerDO> list();
  9. }
  10. package com.ybchen.shopmanager.service.impl;
  11.  
  12. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  13. import com.ybchen.shopmanager.mapper.BannerMapper;
  14. import com.ybchen.shopmanager.model.BannerDO;
  15. import com.ybchen.shopmanager.service.BannerService;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Service;
  18.  
  19. import java.util.List;
  20.  
  21. /**
  22. * @Description:輪播圖Service
  23. * @Author:chenyanbin
  24. * @Date:2021/3/4 下午11:04
  25. * @Versiion:1.0
  26. */
  27. @Service
  28. public class BannerServiceImpl implements BannerService {
  29. @Autowired
  30. private BannerMapper bannerMapper;
  31. @Override
  32. public List<BannerDO> list() {
  33. return bannerMapper.selectList(new QueryWrapper<>());
  34. }
  35. }

Controller

  1. package com.ybchen.shopmanager.controller;
  2.  
  3. import com.ybchen.shopmanager.service.BannerService;
  4. import com.ybchen.shopmanager.utils.JsonData;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RestController;
  9.  
  10. /**
  11. * @Description:輪播圖Controller
  12. * @Author:chenyanbin
  13. * @Date:2021/3/4 下午11:06
  14. * @Versiion:1.0
  15. */
  16. @RestController
  17. @RequestMapping("api/v1/banner")
  18. public class BannerController {
  19. @Autowired
  20. private BannerService bannerService;
  21. @GetMapping("list")
  22. public JsonData list(){
  23. return JsonData.buildSuccess(bannerService.list());
  24. }
  25. }

測試

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

單元測試+控制臺打印sql

單元測試

  1. package com.ybchen.shopmanager;
  2.  
  3. import com.ybchen.shopmanager.model.BannerDO;
  4. import com.ybchen.shopmanager.service.BannerService;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.junit.jupiter.api.Test;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.boot.test.context.SpringBootTest;
  9.  
  10. import java.util.List;
  11.  
  12. //classes=啟動類.class
  13. @SpringBootTest(classes = ShopManagerApplication.class)
  14. @Slf4j
  15. public class BannerTest {
  16. @Autowired
  17. private BannerService bannerService;
  18.  
  19. @Test
  20. public void testBannerTest() {
  21. List<BannerDO> list = bannerService.list();
  22. log.info("輪播圖列表:{}", list);
  23. }
  24. }

配置文件

application.properties

  1. # 配置mybatis plus打印sql日志
  2. mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

測試

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

BaseMapperMapper

繼承該接口后,無需編寫mapper.xml文件,即可獲得CRUD功能

  1. /*
  2. * Copyright (c) 2011-2020, baomidou ([email protected]).
  3. * <p>
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * the License at
  7. * <p>
  8. * https://www.apache.org/licenses/LICENSE-2.0
  9. * <p>
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package com.baomidou.mybatisplus.core.mapper;
  17.  
  18. import com.baomidou.mybatisplus.core.conditions.Wrapper;
  19. import com.baomidou.mybatisplus.core.metadata.IPage;
  20. import com.baomidou.mybatisplus.core.toolkit.Constants;
  21. import org.apache.ibatis.annotations.Param;
  22.  
  23. import java.io.Serializable;
  24. import java.util.Collection;
  25. import java.util.List;
  26. import java.util.Map;
  27.  
  28. /*
  29.  
  30. :`
  31. .:,
  32. :::,,.
  33. :: `::::::
  34. ::` `,:,` .:`
  35. `:: `::::::::.:` `:';,`
  36. ::::, .:::` `@++++++++:
  37. `` :::` @+++++++++++#
  38. :::, #++++++++++++++`
  39. ,: `::::::;'##++++++++++
  40. .@#@;` ::::::::::::::::::::;
  41. #@####@, :::::::::::::::+#;::.
  42. @@######+@:::::::::::::. #@:;
  43. , @@########':::::::::::: .#''':`
  44. ;##@@@+:##########@::::::::::: @#;.,:.
  45. #@@@######++++#####'::::::::: .##+,:#`
  46. @@@@@#####+++++'#####+::::::::` ,`::@#:`
  47. `@@@@#####++++++'#####+#':::::::::::@.
  48. @@@@######+++++''#######+##';::::;':,`
  49. @@@@#####+++++'''#######++++++++++`
  50. #@@#####++++++''########++++++++'
  51. `#@######+++++''+########+++++++;
  52. `@@#####+++++''##########++++++,
  53. @@######+++++'##########+++++#`
  54. @@@@#####+++++############++++;
  55. ;#@@@@@####++++##############+++,
  56. @@@@@@@@@@@###@###############++'
  57. @#@@@@@@@@@@@@###################+:
  58. `@#@@@@@@@@@@@@@@###################'`
  59. :@#@@@@@@@@@@@@@@@@@##################,
  60. ,@@@@@@@@@@@@@@@@@@@@################;
  61. ,#@@@@@@@@@@@@@@@@@@@##############+`
  62. .#@@@@@@@@@@@@@@@@@@#############@,
  63. @@@@@@@@@@@@@@@@@@@###########@,
  64. :#@@@@@@@@@@@@@@@@##########@,
  65. `##@@@@@@@@@@@@@@@########+,
  66. `+@@@@@@@@@@@@@@@#####@:`
  67. `:@@@@@@@@@@@@@@##@;.
  68. `,'@@@@##@@@+;,`
  69. ``...``
  70.  
  71. _ _ /_ _ _/_. ____ / _
  72. / / //_//_//_|/ /_\ /_///_/_\ Talk is cheap. Show me the code.
  73. _/ /
  74. */
  75.  
  76. /**
  77. * Mapper 繼承該接口后,無需編寫 mapper.xml 文件,即可獲得CRUD功能
  78. * <p>這個 Mapper 支持 id 泛型</p>
  79. *
  80. * @author hubin
  81. * @since 2016-01-23
  82. */
  83. public interface BaseMapper<T> extends Mapper<T> {
  84.  
  85. /**
  86. * 插入一條記錄
  87. *
  88. * @param entity 實體對象
  89. */
  90. int insert(T entity);
  91.  
  92. /**
  93. * 根據 ID 刪除
  94. *
  95. * @param id 主鍵ID
  96. */
  97. int deleteById(Serializable id);
  98.  
  99. /**
  100. * 根據 columnMap 條件,刪除記錄
  101. *
  102. * @param columnMap 表字段 map 對象
  103. */
  104. int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
  105.  
  106. /**
  107. * 根據 entity 條件,刪除記錄
  108. *
  109. * @param wrapper 實體對象封裝操作類(可以為 null)
  110. */
  111. int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper);
  112.  
  113. /**
  114. * 刪除(根據ID 批量刪除)
  115. *
  116. * @param idList 主鍵ID列表(不能為 null 以及 empty)
  117. */
  118. int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
  119.  
  120. /**
  121. * 根據 ID 修改
  122. *
  123. * @param entity 實體對象
  124. */
  125. int updateById(@Param(Constants.ENTITY) T entity);
  126.  
  127. /**
  128. * 根據 whereEntity 條件,更新記錄
  129. *
  130. * @param entity 實體對象 (set 條件值,可以為 null)
  131. * @param updateWrapper 實體對象封裝操作類(可以為 null,里面的 entity 用于生成 where 語句)
  132. */
  133. int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);
  134.  
  135. /**
  136. * 根據 ID 查詢
  137. *
  138. * @param id 主鍵ID
  139. */
  140. T selectById(Serializable id);
  141.  
  142. /**
  143. * 查詢(根據ID 批量查詢)
  144. *
  145. * @param idList 主鍵ID列表(不能為 null 以及 empty)
  146. */
  147. List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
  148.  
  149. /**
  150. * 查詢(根據 columnMap 條件)
  151. *
  152. * @param columnMap 表字段 map 對象
  153. */
  154. List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
  155.  
  156. /**
  157. * 根據 entity 條件,查詢一條記錄
  158. *
  159. * @param queryWrapper 實體對象封裝操作類(可以為 null)
  160. */
  161. T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  162.  
  163. /**
  164. * 根據 Wrapper 條件,查詢總記錄數
  165. *
  166. * @param queryWrapper 實體對象封裝操作類(可以為 null)
  167. */
  168. Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  169.  
  170. /**
  171. * 根據 entity 條件,查詢全部記錄
  172. *
  173. * @param queryWrapper 實體對象封裝操作類(可以為 null)
  174. */
  175. List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  176.  
  177. /**
  178. * 根據 Wrapper 條件,查詢全部記錄
  179. *
  180. * @param queryWrapper 實體對象封裝操作類(可以為 null)
  181. */
  182. List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  183.  
  184. /**
  185. * 根據 Wrapper 條件,查詢全部記錄
  186. * <p>注意: 只返回第一個字段的值</p>
  187. *
  188. * @param queryWrapper 實體對象封裝操作類(可以為 null)
  189. */
  190. List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  191.  
  192. /**
  193. * 根據 entity 條件,查詢全部記錄(并翻頁)
  194. *
  195. * @param page 分頁查詢條件(可以為 RowBounds.DEFAULT)
  196. * @param queryWrapper 實體對象封裝操作類(可以為 null)
  197. */
  198. <E extends IPage<T>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  199.  
  200. /**
  201. * 根據 Wrapper 條件,查詢全部記錄(并翻頁)
  202. *
  203. * @param page 分頁查詢條件
  204. * @param queryWrapper 實體對象封裝操作類
  205. */
  206. <E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
  207. }

 Mybatis plus常用注解#

  • @TableName:用于定義表名
  • @TableId:用于定義表的主鍵

value:用于定義主鍵字段名
type:用于定義主鍵類型(主鍵策略 IdType)
IdType.AUTO:主鍵自增,系統分配,不需要手動輸入
IdType.NODE:未設置主鍵
IdType.INPUT:需要自己輸入主鍵值
IdType.ASSIGN_ID:系統分配ID,用于數值型數據(Long,對應mysql中的BIGINT類型)
IdType.ASSIGN_UUID:系統分配uuid,用于字符串型數據
TableField:用于定義表的非主鍵字段
value:用于定義非主鍵字段名,用于別名匹配,假如java對象和數據庫屬性不一樣
exist:用于指明是否為數據表的字段,true表示是,false為不是
fill:用于指定字段填充策略,一般用于填充:創建時間、修改時間等字段
FieldFill.DEFAULT:默認不填充
FieldFill.INSERT:插入時填充
FieldFill.UPDATE:更新時填充
FieldFill.INSERT_UPDATE:插入、更新時填充
QueryWrapper/LambdaQueryWrapper#
  可以封裝sql對象,包括where條件,order by排序

eq:等于
ne:不等于
gt:大于
ge:大于等于
lt:小于
le:小于等于
or:拼接or
between:兩個值中間
notBetween:不在兩個值中間
like:模糊匹配
notLike:不像
likeLeft:左匹配
likeRight:右邊匹配
isNull:字段為空
in:in查詢
groupBy:分組
orderByAsc:升序
orderByDesc:降序
having:having查詢
分頁插件#
配置類#

  1. package com.ybchen.shopmanager.config;
  2.  
  3. import com.baomidou.mybatisplus.annotation.DbType;
  4. import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
  5. import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8.  
  9. /**
  10. * @Description:分頁插件配置
  11. * @Author:chenyanbin
  12. * @Date:2021/3/5 下午10:32
  13. * @Versiion:1.0
  14. */
  15. @Configuration
  16. public class MybatisPlusPageConfig {
  17.  
  18. /**
  19. * 舊版本
  20. */
  21. // @Bean
  22. // public PaginationInterceptor paginationInterceptor() {
  23. // PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
  24. // return paginationInterceptor;
  25. // }
  26.  
  27. /**
  28. * 新的分頁插件,一級和二級緩存遵循mybatis的規則
  29. * 需要設置 MybatisConfiguration#useDeprecatedExecutor=false 避免緩存出現問題
  30. */
  31. @Bean
  32. public MybatisPlusInterceptor mybatisPlusInterceptor() {
  33. MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
  34. mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
  35. return mybatisPlusInterceptor;
  36. }
  37. }

演示類

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

自定義xml的sql腳本

新建xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <!--這個名稱空間是Mapper接口的路徑-->
  4. <mapper namespace="com.ybchen.shopmanager.mapper.BannerMapper">
  5. <select id="getList" resultType="com.ybchen.shopmanager.model.BannerDO">
  6. select * from banner
  7. </select>
  8. </mapper>

BannerMapper.java添加方法

  1. package com.ybchen.shopmanager.mapper;
  2.  
  3. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4. import com.ybchen.shopmanager.model.BannerDO;
  5.  
  6. import java.util.List;
  7.  
  8. /**
  9. * @Description:輪播圖Mapper
  10. * @Author:chenyanbin
  11. * @Date:2021/3/4 下午11:03
  12. * @Versiion:1.0
  13. */
  14. public interface BannerMapper extends BaseMapper<BannerDO> {
  15. List<BannerDO> getList();
  16. }

配置文件告訴mapper.xml路徑

application.properties

  1. # 默認配置路徑
  2. mybatis-plus.mapper-locations=classpath*:/mapper/*Mapper.xml

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

全局配置文件

注意config-location和configuration不能同時出現

修改配置文件

application.properties

  1. #配置全局配置文件!!!!
  2. mybatis-plus.config-location = classpath:mybatis-config.xml

新建mybatis-config.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
  3. <configuration>
  4. <settings>
  5. <!--控制臺輸出日志-->
  6. <setting name="logImpl" value="STDOUT_LOGGING"/>
  7. </settings>
  8. </configuration>

測試

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

配置實體類別名

修改application.properties

  1. # 配置實體類別名
  2. mybatis-plus.type-aliases-package=com.ybchen.shopmanager.model

測試

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

mybatis plus下劃線轉駝峰

默認就是true

修改application.properties

  1. # mybatis plus下劃線轉駝峰
  2. mybatis-plus.configuration.map-underscore-to-camel-case=true

配置全局默認主鍵類型

實體類上就不用加 @TableId(value="id",type=IdType.AUTO)

修改application.properties

  1. # 配置全局默認主鍵規則
  2. mybatis-plus.global-config.db-config.id-type=auto

完整application.properties

  1. # 端口號
  2. server.port=9999
  3. #===========數據庫相關=============
  4. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  5. spring.datasource.url=jdbc:mysql://127.0.0.1/shop?useUnicode=true&characterEncoding=utf-8&useSSL=false
  6. spring.datasource.username=root
  7. spring.datasource.password=root
  8. # 配置mybatis plus打印sql日志
  9. #mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
  10. # 默認配置路徑
  11. mybatis-plus.mapper-locations=classpath*:/mapper/*Mapper.xml
  12. #配置全局配置文件!!!!
  13. mybatis-plus.config-location = classpath:mybatis-config.xml
  14. # 配置實體類別名
  15. mybatis-plus.type-aliases-package=com.ybchen.shopmanager.model
  16. # mybatis plus下劃線轉駝峰
  17. mybatis-plus.configuration.map-underscore-to-camel-case=true
  18. # 配置全局默認主鍵規則
  19. mybatis-plus.global-config.db-config.id-type=auto

樂觀鎖

  大多是基于數據版本(Version)記錄機制實現。即為數據增加一個版本標識,在基于數據庫表的版本解決方案中,一般通過為數據庫表增加一個“version”字段來實現。讀取數據時,將此版本號一同讀出,之后更新時,對此版本號加一。此時,將提交數據的版本數據與數據,庫表對應記錄的當前版本信息進行比較,如果提交的數據,版本號大于數據庫表當前的版本號,則予以更新,否則認為是過期數據。

實體類增加@version

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

增加樂觀鎖插件

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

  1. package com.ybchen.shopmanager.config;
  2.  
  3. import com.baomidou.mybatisplus.annotation.DbType;
  4. import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
  5. import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
  6. import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9.  
  10. /**
  11. * @Description:分頁插件配置
  12. * @Author:chenyanbin
  13. * @Date:2021/3/5 下午10:32
  14. * @Versiion:1.0
  15. */
  16. @Configuration
  17. public class MybatisPlusPageConfig {
  18.  
  19. /**
  20. * 舊版本
  21. */
  22. // @Bean
  23. // public PaginationInterceptor paginationInterceptor() {
  24. // PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
  25. // return paginationInterceptor;
  26. // }
  27.  
  28. /**
  29. * 新的分頁插件,一級和二級緩存遵循mybatis的規則
  30. * 需要設置 MybatisConfiguration#useDeprecatedExecutor=false 避免緩存出現問題
  31. */
  32. @Bean
  33. public MybatisPlusInterceptor mybatisPlusInterceptor() {
  34. MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
  35. //分頁插件
  36. mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
  37. //樂觀鎖插件
  38. mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
  39. return mybatisPlusInterceptor;
  40. }
  41. }

使用

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

注意

  • 樂觀鎖數據類型支持int、Integer、long、timestamp
  • 僅支持updateById和update方法

邏輯刪除

  公司在設計規范中都加入了邏輯刪除的強制規定,運營人員可以分析和審查數據,也方便將數據沉淀下來用于商業分析。

  數據量過多,也會采用數據倉庫,通過監聽應用數據庫的數據變化,進行遷移到數據倉庫。

方式一

  • 數據庫增加deleted字段,0是未刪除,1表示刪除
  • 實體類增加屬性配置@TableLogic
  • 查詢的時候會自動拼接上deleted=0的檢索條件

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

方式二

修改application.properties

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

  1. # 邏輯刪除,刪除是1
  2. mybatis-plus.global-config.db-config.logic-delete-value=1
  3. # 邏輯刪除,未刪除是0
  4. mybatis-plus.global-config.db-config.logic-not-delete-value=0
  5. # 如果java實體類沒加注解@TableLogic,則可以配置這個,推薦這里配置
  6. mybatis-plus.global-config.db-config.logic-delete-field=deleted

代碼生成器#
添加依賴#

  1. <!-- 代碼自動生成依賴 begin -->
  2. <dependency>
  3. <groupId>com.baomidou</groupId>
  4. <artifactId>mybatis-plus-generator</artifactId>
  5. <version>3.4.1</version>
  6. </dependency>
  7. <!-- velocity -->
  8. <dependency>
  9. <groupId>org.apache.velocity</groupId>
  10. <artifactId>velocity-engine-core</artifactId>
  11. <version>2.0</version>
  12. </dependency>
  13. <!-- 代碼自動生成依賴 end-->

生成器類#

  1. package com.ybchen.shopmanager;
  2.  
  3. import com.baomidou.mybatisplus.annotation.DbType;
  4. import com.baomidou.mybatisplus.annotation.IdType;
  5. import com.baomidou.mybatisplus.generator.AutoGenerator;
  6. import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
  7. import com.baomidou.mybatisplus.generator.config.GlobalConfig;
  8. import com.baomidou.mybatisplus.generator.config.PackageConfig;
  9. import com.baomidou.mybatisplus.generator.config.StrategyConfig;
  10. import com.baomidou.mybatisplus.generator.config.rules.DateType;
  11. import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
  12.  
  13. /**
  14. * @Description:代碼生成器
  15. * @Author:chenyanbin
  16. * @Date:2021/3/6 下午5:10
  17. * @Versiion:1.0
  18. */
  19. public class MyBatisPlusGenerator {
  20. public static void main(String[] args) {
  21. //1. 全局配置
  22. GlobalConfig config = new GlobalConfig();
  23. // 是否支持AR模式
  24. config.setActiveRecord(true)
  25. // 作者
  26. .setAuthor("chenyanbin")
  27. // 生成路徑,最好使用絕對路徑,window路徑是不一樣的
  28. .setOutputDir("/Users/chenyanbin/IdeaProjects/shop-manager")
  29. // 文件覆蓋
  30. .setFileOverride(true)
  31. // 主鍵策略
  32. .setIdType(IdType.AUTO)
  33.  
  34. .setDateType(DateType.ONLY_DATE)
  35. // 設置生成的service接口的名字的首字母是否為I,默認Service是以I開頭的
  36. .setServiceName("%sService")
  37.  
  38. //實體類結尾名稱
  39. .setEntityName("%sDO")
  40.  
  41. //生成基本的resultMap
  42. .setBaseResultMap(true)
  43.  
  44. //不使用AR模式
  45. .setActiveRecord(false)
  46.  
  47. //生成基本的SQL片段
  48. .setBaseColumnList(true);
  49.  
  50. //2. 數據源配置
  51. DataSourceConfig dsConfig = new DataSourceConfig();
  52. // 設置數據庫類型
  53. dsConfig.setDbType(DbType.MYSQL)
  54. .setDriverName("com.mysql.cj.jdbc.Driver")
  55. .setUrl("jdbc:mysql://127.0.0.1:3306/shop?useSSL=false")
  56. .setUsername("root")
  57. .setPassword("root");
  58.  
  59. //3. 策略配置globalConfiguration中
  60. StrategyConfig stConfig = new StrategyConfig();
  61.  
  62. //全局大寫命名
  63. stConfig.setCapitalMode(true)
  64. // 數據庫表映射到實體的命名策略
  65. .setNaming(NamingStrategy.underline_to_camel)
  66.  
  67. //使用lombok
  68. .setEntityLombokModel(true)
  69.  
  70. //使用restcontroller注解
  71. .setRestControllerStyle(true)
  72.  
  73. // 生成的表, 支持多表一起生成,以數組形式填寫
  74. .setInclude("product","banner","address","coupon","product_order");
  75.  
  76. //4. 包名策略配置
  77. PackageConfig pkConfig = new PackageConfig();
  78. pkConfig.setParent("net.mybatisplus")
  79. .setMapper("mapper")
  80. .setService("service")
  81. .setController("controller")
  82. .setEntity("model")
  83. .setXml("mapper");
  84.  
  85. //5. 整合配置
  86. AutoGenerator ag = new AutoGenerator();
  87. ag.setGlobalConfig(config)
  88. .setDataSource(dsConfig)
  89. .setStrategy(stConfig)
  90. .setPackageInfo(pkConfig);
  91.  
  92. //6. 執行操作
  93. ag.execute();
  94. System.out.println("======= 代碼生成完畢 ========");
  95. }
  96. }

使用#

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

SpringBoot整合Swagger 3.x

添加依賴

  1. <!--springBoot整合swagger3.0-->
  2. <dependency>
  3. <groupId>io.springfox</groupId>
  4. <artifactId>springfox-boot-starter</artifactId>
  5. <version>3.0.0</version>
  6. </dependency>

修改application.properties

添加如下信息

  1. spring.application.name=shop-manager
  2. # ===== 自定義swagger配置 ===== #
  3. swagger.enable=true
  4. swagger.application-name= ${spring.application.name}
  5. swagger.application-version=1.0
  6. swagger.application-description=shop api

配置類

  1. package com.ybchen.shopmanager.config;
  2.  
  3. import io.swagger.annotations.ApiOperation;
  4. import lombok.Data;
  5. import org.springframework.boot.context.properties.ConfigurationProperties;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.stereotype.Component;
  8. import springfox.documentation.builders.ApiInfoBuilder;
  9. import springfox.documentation.builders.PathSelectors;
  10. import springfox.documentation.builders.RequestHandlerSelectors;
  11. import springfox.documentation.oas.annotations.EnableOpenApi;
  12. import springfox.documentation.service.ApiInfo;
  13. import springfox.documentation.service.Contact;
  14. import springfox.documentation.spi.DocumentationType;
  15. import springfox.documentation.spring.web.plugins.Docket;
  16.  
  17. /**
  18. * @Description:swagger配置類
  19. * @Author:chenyanbin
  20. * @Date:2021/3/5 下午10:32
  21. * @Versiion:1.0
  22. */
  23. @Component
  24. @Data
  25. @ConfigurationProperties("swagger")
  26. @EnableOpenApi
  27. public class SwaggerConfiguration {
  28.  
  29. /**
  30. * 是否開啟swagger,生產環境一般關閉,所以這里定義一個變量
  31. */
  32. private Boolean enable;
  33.  
  34. /**
  35. * 項目應用名
  36. */
  37. private String applicationName;
  38.  
  39. /**
  40. * 項目版本信息
  41. */
  42. private String applicationVersion;
  43.  
  44. /**
  45. * 項目描述信息
  46. */
  47. private String applicationDescription;
  48.  
  49. @Bean
  50. public Docket docket(){
  51.  
  52. return new Docket(DocumentationType.OAS_30)
  53. .pathMapping("/")
  54. // 定義是否開啟swagger,false為關閉,可以通過變量控制,線上關閉
  55. .enable(enable)
  56. //配置api文檔元信息
  57. .apiInfo(apiInfo())
  58. // 選擇哪些接口作為swagger的doc發布
  59. .select()
  60. //apis() 控制哪些接口暴露給swagger,
  61. // RequestHandlerSelectors.any() 所有都暴露
  62. // RequestHandlerSelectors.basePackage("net.ybchen.*") 指定包位置
  63. // withMethodAnnotation(ApiOperation.class)標記有這個注解 ApiOperation
  64. .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
  65. .paths(PathSelectors.any())
  66. .build();
  67.  
  68. }
  69.  
  70. private ApiInfo apiInfo() {
  71. return new ApiInfoBuilder()
  72. .title(applicationName)
  73. .description(applicationDescription)
  74. .contact(new Contact("陳彥斌", "https://www.cnblogs.com/chenyanbin/", "[email protected]"))
  75. .version(applicationVersion)
  76. .build();
  77. }
  78. }

啟動測試

  訪問地址:http://localhost:9999/swagger-ui/index.html

  注意:如果訪問不成功,看是否攔截器攔截了相關資源!!!!!

SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI

常用注解

@Api

用在controller類,描述API接口

  1. @Api(tags = "用戶模塊",value = "用戶UserController")
  2. public class UserController {
  3. }

@ApiOperation#

接口配置,用在方法上,描述接口方法

  1. @ApiOperation("分頁用戶列表")
  2. @GetMapping("list")
  3. public JsonData list(){
  4. ?
  5. return JsonData.buildSuccess();
  6. }

@ApiParam#

方法參數配置,用在入參上面,描述參數

  1. @ApiOperation("用戶登錄")
  2. @PostMapping("login")
  3. public JsonData login(
  4. @ApiParam(name = "phone", value = "手機號",example = "13888888888")
  5. @RequestParam("phone") String phone,
  6. ?
  7. @ApiParam(name = "pwd", value = "密碼",example = "123456")
  8. @RequestParam("pwd")String pwd){
  9. ?
  10. return JsonData.buildSuccess();
  11. }

@Apilgnore#
忽略此接口不生成文檔

  1. @ApiIgnore
  2. @ApiOperation("刪除用戶")
  3. @DeleteMapping("/delete/{id}")
  4. public JsonData deleteById(@PathVariable int id) {
  5. return JsonData.buildSuccess();
  6. }

@ApiModel#
用于類,表示對類進行說明,用于參數,用實體類接收
@ApiModelProperty#
用于方法,字段;表示對model屬性的說明或者數據操作更改
value:字段說明
name:重寫屬性名稱
dataType:重寫屬性類型
required:是否必填
example:舉例說明
hidden:隱藏
@Data
@ApiModel("用戶基本信息")

  1. public class SaveUserRequest {
  2. ?
  3. private int age;
  4. ?
  5. private String pwd;
  6. ?
  7. @ApiModelProperty(value ="【必填】郵箱",required = true)
  8. private String email;
  9. ?
  10. @ApiModelProperty("【必填】手機號")
  11. private String phone;
  12. ?
  13. @ApiModelProperty(value="創建時間")
  14. private Date createTime;
  15. ?
  16. }

@ApiResponse#
描述接口響應

  1. @ApiOperation("用戶登錄")
  2. @PostMapping("login")
  3. @ApiResponses({
  4. @ApiResponse(responseCode = CodeStatus.SUCCESS, description = "保存成功"),
  5. @ApiResponse(responseCode = CodeStatus.FAIL, description = "保存失敗")
  6. })
  7. public JsonData login(
  8. @ApiParam(name = "phone", value = "手機號",example = "13888888888")
  9. @RequestParam("phone") String phone,
  10. ?
  11. @ApiParam(name = "pwd", value = "密碼",example = "123456")
  12. @RequestParam("pwd")String pwd){
  13. ?
  14. return JsonData.buildSuccess();
  15. }

項目源碼下載

鏈接: https://pan.baidu.com/s/1OaOG0xK6jl8zDweAMkggAQ 提取碼: ed54

到此這篇關于SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI的文章就介紹到這了,更多相關SpringBoot Lombok+MybatisPlus+SwaggerUI內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/chenyanbin/p/mybatis-plus.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 我的漂亮朋友在线观看全集免费 | 亚洲精品国产在线 | 99国产精品免费视频 | 偷偷狠狠的日日高清完整视频 | 14一15sexvideo日本 | 亚洲精品一二三四区 | 男女爆操| 美女班主任下面好爽好湿好紧 | 日本视频在线观看 | 激情三级做爰在线观看激情 | 国产精品永久免费自在线观看 | 欧美一区不卡二区不卡三区 | 色综合伊人色综合网站中国 | 无码骚夜夜精品 | 四虎黄色网址 | 免费精品视频在线 | 免费看男人使劲躁女人小说 | 波多野结衣女老师 | 亚洲AV久久无码精品九号软件 | 果冻传媒i91media免费 | 国产精品调教 | 蛮荒的童话未删减在线观看 | 国产-第1页-草草影院 | 欧美精品久久久久久久免费观看 | 色老板在线免费观看 | 亚洲AV蜜桃永久无码精品无码网 | free性俄罗斯护士 | 免费a视频在线观看 | 国产精品九九热 | 精品国产免费久久久久久 | 久久99视热频国只有精品 | 日本全黄三级在线观看 | 亚洲精品免费在线 | 国产一区二区三区在线看 | 亚洲国产区中文在线观看 | sex5·性屋娱乐| 日本免费播放 | 免费看伦理片 | 美女隐私部位视频网站 | 国产精品视频在这里有精品 | 国产一卡二卡四卡免费 |