導讀
- Lombok:可以讓你的POJO代碼特別簡潔,不止簡單在BO/VO/DTO/DO等大量使用,還有設計模式,對象對比等
- MybatisPlus:增加版Mybatis,基礎的數據庫CRUD、分頁等可以直接生成使用,避免了大量的重復低效代碼,還有數據庫自動Java類,sql文件等等,比傳統的更賤簡介易用
- SwaggerUI:接口文檔自動生成,對接前端和測試更加方便,基于業界的OpennApi規范,采用Swagger3.x版本。
技術棧
SpringBoot2.4+ MybatisPlus+Lombok+Swagger3.x+jdk8+IDEA
在線構建項目
什么是lombok
官網
一個優秀的Java代碼庫,簡化了Java的編碼,為Java代碼的精簡提供了一種方式
添加依賴
- <!--lombok-->
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <version>1.18.16</version>
- <!--scope=provided,說明它是在編譯階段生效,不需要打入包中,Lombok在編譯期將帶Lombok注解的Java文件正確編譯為完整的Class文件-->
- <scope>provided</scope>
- </dependency>
常見注解@Getter/@Setter#
- 作用類上,生成所有成員變量的getter/setter方法
- 作用于成員變量上,生成該成員變量的getter/setter方法
- 方法控制訪問級別set和get注解加上@Getter(AccessLevel.PROTECTED)
編譯查看字節碼
- mvn compile
- package com.ybchen.shopmanager.model;
- import lombok.AccessLevel;
- import lombok.Getter;
- import lombok.Setter;
- /**
- * @Description:
- * @Author:chenyanbin
- * @Date:2021/3/2 下午9:43
- * @Versiion:1.0
- */
- @Getter
- @Setter
- public class User {
- //不想生成get方法
- @Getter(AccessLevel.NONE)
- int id;
- //只會去生成get
- final String name = "alex";
- String phone;
- //靜態成員變量不會生成set/get方法
- static final String pwd = "123";
- }
@NonNull
作用于方法上或者屬性,用于非空判斷,如果為空則拋異常
@NoArgsContructor
生成無參構造器
@AllArgsConstructor
生成全參構造器
@RequiredArgsConstructor
指定參數的構造函數,有以下的特征的字段
- final類型未被初始化的屬性,標記了@NonNull的屬性
- 注意:@NoArgsConstructor不能添加
@ToStringList或者其他集合調試不方便控制臺或者日志輸出對象,默認打印的是內存地址作用于類,覆蓋默認的toString()方法
不包括某個字段
@ToString(exclude={"age"})
只輸出某個字段
@ToString(of={"name"})
為什么對象要重寫hashcode和equal方法
HashCode方法
- 頂級類Object里面的方法,所有類都是繼承Object的,返回值Int類型
- 根據一定的hash規則(存儲地址,字段,或者長度等),映射成一個數值,即散列值
Equals方法
- 頂級類Object里面的方法,所有類都是繼承Object的,返回值boolean類型
- 根據自定義的匹配規則,用于匹配兩個對象是否一樣,一般邏輯如下
1、判斷地址是否一樣
2、非空判斷和class類型判斷
3、強轉
4、對象里面的字段一一匹配
解析
如果兩個對象相等,那么它們的hashCode()值一定相同。如果兩個對象hashCode()相等,它們并不一定相等。在散列表中hashCode()相等,即兩個鍵值的哈希值相等。然后哈希值相等,并不一定得出鍵值對相等,就出現所謂的哈希沖突場景,還需要equals方法判斷對象是否相等。
應用場景
當向集合中插入對象時,如何判別在集合中是否已經存在該對象,比如Set確保存儲對象的唯一值,并判斷是否同一個對象呢?
- 依據hashCode和equals進行判斷
- 所以Set存儲的對象必須重寫這兩個方法,判斷兩個對象是否一樣
- 首先判斷插入對象的hashCode值是否存在,hashCode值不存在則直接插入集合;值存在則還需要判斷equals方法判斷對象是否相等
@EqualsAndHashCode
作用于類,覆蓋默認的equals和hashCode,作用于全部屬性
不包含某個屬性
@EqualsAndHashCode(exclude={"id"})
只輸出某個屬性
@EqualsAndHashCode(of={"id"})
@Data
作用于類上,是以下注解的集合
@ToString
@EqualsAndHashCode
@Getter
@Setter
@RequiredArgsConstructor
@Builder場景:當一個bean類重載了多個構造方法時,并且參數隨機使用時,考慮使用構造者模式
@Lof/@Slf4j作用于類上,生成日志變量,用于記錄日志
MybatisPlus介紹
- 官網:點我直達
- 是一個mybatis的增強工具,在Mybatis的基礎上只做強增不做改變,為簡化開發,提高效率
數據庫腳本
- /*
- Navicat Premium Data Transfer
- Source Server : localhost
- Source Server Type : MySQL
- Source Server Version : 50728
- Source Host : localhost:3306
- Source Schema : shop
- Target Server Type : MySQL
- Target Server Version : 50728
- File Encoding : 65001
- Date: 04/03/2021 22:17:20
- */
- SET NAMES utf8mb4;
- SET FOREIGN_KEY_CHECKS = 0;
- -- ----------------------------
- -- Table structure for address
- -- ----------------------------
- DROP TABLE IF EXISTS `address`;
- CREATE TABLE `address` (
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `user_id` bigint(20) DEFAULT NULL COMMENT '用戶id',
- `default_status` int(1) DEFAULT NULL COMMENT '是否默認收貨地址:0->否;1->是',
- `receive_name` varchar(64) DEFAULT NULL COMMENT '收發貨人姓名',
- `phone` varchar(64) DEFAULT NULL COMMENT '收貨人電話',
- `province` varchar(64) DEFAULT NULL COMMENT '省/直轄市',
- `city` varchar(64) DEFAULT NULL COMMENT '市',
- `region` varchar(64) DEFAULT NULL COMMENT '區',
- `detail_address` varchar(200) DEFAULT NULL COMMENT '詳細地址',
- `create_time` datetime DEFAULT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='電商-公司收發貨地址表';
- -- ----------------------------
- -- Records of address
- -- ----------------------------
- BEGIN;
- COMMIT;
- -- ----------------------------
- -- Table structure for banner
- -- ----------------------------
- DROP TABLE IF EXISTS `banner`;
- CREATE TABLE `banner` (
- `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
- `img` varchar(524) DEFAULT NULL COMMENT '圖片',
- `url` varchar(524) DEFAULT NULL COMMENT '跳轉地址',
- `weight` int(11) DEFAULT NULL COMMENT '權重',
- `version` int(11) DEFAULT '1',
- `deleted` int(11) DEFAULT '0' COMMENT '0是未刪除,1是已經刪除',
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4;
- -- ----------------------------
- -- Records of banner
- -- ----------------------------
- BEGIN;
- INSERT INTO `banner` VALUES (1, 'https://images.cnblogs.com/cnblogs_com/chenyanbin/1560326/o_qianxun.jpg', 'https://www.cnblogs.com/chenyanbin/', 1, 2, 1);
- INSERT INTO `banner` VALUES (2, 'https://images.cnblogs.com/cnblogs_com/chenyanbin/1560326/o_qianxun.jpg', 'https://www.cnblogs.com/chenyanbin/', 3, 1, 0);
- INSERT INTO `banner` VALUES (3, 'https://images.cnblogs.com/cnblogs_com/chenyanbin/1560326/o_qianxun.jpg', 'https://www.cnblogs.com/chenyanbin/', 2, 1, 0);
- INSERT INTO `banner` VALUES (7, 'werw', 'https://images.cnblogs.com/cnblogs_com/chenyanbin/1560326/o_qianxun.jpg', 2, 1, 0);
- INSERT INTO `banner` VALUES (8, '666666', 'https://images.cnblogs.com/cnblogs_com/chenyanbin/1560326/o_qianxun.jpg', 2, 1, 0);
- INSERT INTO `banner` VALUES (9, 'sdfds', 'https://images.cnblogs.com/cnblogs_com/chenyanbin/1560326/o_qianxun.jpg', 2, 1, 0);
- INSERT INTO `banner` VALUES (10, '323232', 'https://images.cnblogs.com/cnblogs_com/chenyanbin/1560326/o_qianxun.jpg', 2, 1, 0);
- INSERT INTO `banner` VALUES (11, '532', 'https://images.cnblogs.com/cnblogs_com/chenyanbin/1560326/o_qianxun.jpg', 2, 1, 0);
- INSERT INTO `banner` VALUES (12, '6666', 'https://images.cnblogs.com/cnblogs_com/chenyanbin/1560326/o_qianxun.jpg', 2, 1, 0);
- COMMIT;
- -- ----------------------------
- -- Table structure for coupon
- -- ----------------------------
- DROP TABLE IF EXISTS `coupon`;
- CREATE TABLE `coupon` (
- `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
- `category` varchar(11) DEFAULT NULL COMMENT '優惠卷類型[NEW_USER注冊贈券,TASK任務卷,PROMOTION促銷劵]',
- `publish` varchar(11) DEFAULT NULL COMMENT '發布狀態, PUBLISH發布,DRAFT草稿,OFFLINE下線',
- `coupon_img` varchar(524) DEFAULT NULL COMMENT '優惠券圖片',
- `coupon_title` varchar(128) DEFAULT NULL COMMENT '優惠券標題',
- `price` decimal(16,2) DEFAULT NULL COMMENT '抵扣價格',
- `user_limit` int(11) DEFAULT NULL COMMENT '每人限制張數',
- `start_time` datetime DEFAULT NULL COMMENT '優惠券開始有效時間',
- `end_time` datetime DEFAULT NULL COMMENT '優惠券失效時間',
- `publish_count` int(11) DEFAULT NULL COMMENT '優惠券總量',
- `stock` int(11) DEFAULT '0' COMMENT '庫存',
- `add_one` int(11) DEFAULT NULL COMMENT '是否疊加0是不行,1是可以',
- `create_time` datetime DEFAULT NULL,
- `condition_price` decimal(16,2) DEFAULT NULL COMMENT '滿多少才可以使用',
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- -- ----------------------------
- -- Records of coupon
- -- ----------------------------
- BEGIN;
- COMMIT;
- -- ----------------------------
- -- Table structure for product
- -- ----------------------------
- DROP TABLE IF EXISTS `product`;
- CREATE TABLE `product` (
- `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT,
- `title` varchar(128) DEFAULT NULL COMMENT '標題',
- `cover_img` varchar(128) DEFAULT NULL COMMENT '封面圖',
- `detail` varchar(256) DEFAULT '' COMMENT '詳情',
- `old_price` decimal(16,2) DEFAULT NULL COMMENT '老價格',
- `price` decimal(16,2) DEFAULT NULL COMMENT '新價格',
- `stock` int(11) DEFAULT NULL COMMENT '庫存',
- `create_time` datetime DEFAULT NULL COMMENT '創建時間',
- `lock_stock` int(11) DEFAULT '0' COMMENT '鎖定庫存',
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
- -- ----------------------------
- -- Records of product
- -- ----------------------------
- BEGIN;
- COMMIT;
- -- ----------------------------
- -- Table structure for product_order
- -- ----------------------------
- DROP TABLE IF EXISTS `product_order`;
- CREATE TABLE `product_order` (
- `id` bigint(11) NOT NULL AUTO_INCREMENT,
- `out_trade_no` varchar(64) DEFAULT NULL COMMENT '訂單唯一標識',
- `state` varchar(11) DEFAULT NULL COMMENT 'NEW 未支付訂單,PAY已經支付訂單,CANCEL超時取消訂單',
- `create_time` datetime DEFAULT NULL COMMENT '訂單生成時間',
- `total_fee` decimal(16,2) DEFAULT NULL COMMENT '訂單總金額',
- `pay_fee` decimal(16,2) DEFAULT NULL COMMENT '訂單實際支付價格',
- `pay_type` varchar(64) DEFAULT NULL COMMENT '支付類型,微信-銀行-支付寶',
- `nickname` varchar(64) DEFAULT NULL COMMENT '昵稱',
- `head_img` varchar(524) DEFAULT NULL COMMENT '頭像',
- `user_id` int(11) DEFAULT NULL COMMENT '用戶id',
- `del` int(5) DEFAULT '0' COMMENT '0表示未刪除,1表示已經刪除',
- `update_time` datetime DEFAULT NULL COMMENT '更新時間',
- `order_type` varchar(32) DEFAULT NULL COMMENT '訂單類型 DAILY普通單,PROMOTION促銷訂單',
- `receiver_address` varchar(1024) DEFAULT NULL COMMENT '收貨地址 json存儲',
- PRIMARY KEY (`id`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
- -- ----------------------------
- -- Records of product_order
- -- ----------------------------
- BEGIN;
- COMMIT;
- -- ----------------------------
- -- Table structure for product_order_item
- -- ----------------------------
- DROP TABLE IF EXISTS `product_order_item`;
- CREATE TABLE `product_order_item` (
- `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT,
- `product_order_id` bigint(11) DEFAULT NULL COMMENT '訂單號',
- `out_trade_no` varchar(32) DEFAULT NULL,
- `product_id` bigint(11) DEFAULT NULL COMMENT '產品id',
- `product_name` varchar(128) DEFAULT NULL COMMENT '商品名稱',
- `product_img` varchar(524) DEFAULT NULL COMMENT '商品圖片',
- `buy_num` int(11) DEFAULT NULL COMMENT '購買數量',
- `create_time` datetime DEFAULT NULL,
- `total_fee` decimal(16,2) DEFAULT NULL COMMENT '購物項商品總價格',
- `pay_fee` decimal(16,0) DEFAULT NULL COMMENT '購物項商品支付總價格',
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- -- ----------------------------
- -- Records of product_order_item
- -- ----------------------------
- BEGIN;
- COMMIT;
- -- ----------------------------
- -- Table structure for user
- -- ----------------------------
- DROP TABLE IF EXISTS `user`;
- CREATE TABLE `user` (
- `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT,
- `name` varchar(128) DEFAULT NULL COMMENT '昵稱',
- `pwd` varchar(124) DEFAULT NULL COMMENT '密碼',
- `head_img` varchar(524) DEFAULT NULL COMMENT '頭像',
- `slogan` varchar(524) DEFAULT NULL COMMENT '用戶簽名',
- `sex` tinyint(2) DEFAULT '1' COMMENT '0表示女,1表示男',
- `points` int(10) DEFAULT '0' COMMENT '積分',
- `create_time` datetime DEFAULT NULL,
- `mail` varchar(64) DEFAULT NULL COMMENT '郵箱',
- `secret` varchar(12) DEFAULT NULL COMMENT '鹽,用于個人敏感信息處理',
- PRIMARY KEY (`id`),
- UNIQUE KEY `mail_idx` (`mail`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- -- ----------------------------
- -- Records of user
- -- ----------------------------
- BEGIN;
- COMMIT;
- SET FOREIGN_KEY_CHECKS = 1;
pom.xml
- <!--mysql-->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
- <!--mybatis plus和spring boot整合-->
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter</artifactId>
- <version>3.4.0</version>
- </dependency>
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.4.3</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <groupId>com.ybchen</groupId>
- <artifactId>shop-manager</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>shop-manager</name>
- <description>Demo project for Spring Boot</description>
- <properties>
- <java.version>1.8</java.version>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- <!--lombok-->
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <version>1.18.16</version>
- <!--scope=provided,說明它是在編譯階段生效,不需要打入包中,Lombok在編譯期將帶Lombok注解的Java文件正確編譯為完整的Class文件-->
- <scope>provided</scope>
- </dependency>
- <!--mysql-->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
- <!--mybatis plus和spring boot整合-->
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter</artifactId>
- <version>3.4.0</version>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- <!-- 代碼庫 -->
- <repositories>
- <repository>
- <id>maven-ali</id>
- <url>http://maven.aliyun.com/nexus/content/groups/public//</url>
- <releases>
- <enabled>true</enabled>
- </releases>
- <snapshots>
- <enabled>true</enabled>
- <updatePolicy>always</updatePolicy>
- <checksumPolicy>fail</checksumPolicy>
- </snapshots>
- </repository>
- </repositories>
- <pluginRepositories>
- <pluginRepository>
- <id>public</id>
- <name>aliyun nexus</name>
- <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
- <releases>
- <enabled>true</enabled>
- </releases>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </pluginRepository>
- </pluginRepositories>
- </project>
完整pom.xml配置文件
application.properties
- # 端口號
- server.port=9999
- #===========數據庫相關=============
- spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
- spring.datasource.url=jdbc:mysql://127.0.0.1/shop?useUnicode=true&characterEncoding=utf-8&useSSL=false
- spring.datasource.username=root
- spring.datasource.password=root
配置SpringBoot掃描路徑
啟動類上添加:@MapperScan("Mapper全包路徑")
SpringBoot整合MybatisPlus
統一接口返回協議
- package com.ybchen.shopmanager.utils;
- import lombok.AllArgsConstructor;
- import lombok.Data;
- import lombok.NoArgsConstructor;
- import java.io.Serializable;
- @Data
- @AllArgsConstructor
- @NoArgsConstructor
- public class JsonData implements Serializable {
- /**
- * 狀態碼 0 表示成功,1 表示處理中,-1表示失敗
- */
- private Integer code;
- /**
- * 數據
- */
- private Object data;
- /**
- * 描述信息
- */
- private String msg;
- /**
- * 成功,無傳入數據
- *
- * @return
- */
- public static JsonData buildSuccess() {
- return new JsonData(0, null, null);
- }
- /**
- * 成功,有傳入數據
- *
- * @param data 數據
- * @return
- */
- public static JsonData buildSuccess(Object data) {
- return new JsonData(0, data, null);
- }
- /**
- * 失敗,有返回錯誤信息
- *
- * @param msg 描述信息
- * @return
- */
- public static JsonData buildError(String msg) {
- return new JsonData(-1, null, msg);
- }
- /**
- * 失敗,有狀態碼,描述信息
- *
- * @param code 狀態碼
- * @param msg 描述信息
- * @return
- */
- public static JsonData buildError(Integer code, String msg) {
- return new JsonData(code, null, msg);
- }
- /**
- * 是否返回成功
- * @param jsonData
- * @return
- */
- public static boolean isSuccess(JsonData jsonData) {
- return jsonData.getCode() == 0;
- }
- }
實體類
- package com.ybchen.shopmanager.model;
- import com.baomidou.mybatisplus.annotation.TableName;
- import lombok.Data;
- /**
- * @Description:輪播圖
- * @Author:chenyanbin
- * @Date:2021/3/4 下午11:00
- * @Versiion:1.0
- */
- @Data
- //數據庫表名
- @TableName("banner")
- public class BannerDO {
- /**
- * 主鍵
- */
- private Integer id;
- /**
- * 圖片
- */
- private String img;
- /**
- * url跳轉地址
- */
- private String url;
- /**
- * 權重
- */
- private Integer weight;
- /**
- * 版本號
- */
- private Integer version;
- /**
- * 0是未刪除,1是已經刪除
- */
- private Integer deleted;
- }
service
- package com.ybchen.shopmanager.service;
- import com.ybchen.shopmanager.model.BannerDO;
- import java.util.List;
- public interface BannerService {
- List<BannerDO> list();
- }
- package com.ybchen.shopmanager.service.impl;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.ybchen.shopmanager.mapper.BannerMapper;
- import com.ybchen.shopmanager.model.BannerDO;
- import com.ybchen.shopmanager.service.BannerService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.List;
- /**
- * @Description:輪播圖Service
- * @Author:chenyanbin
- * @Date:2021/3/4 下午11:04
- * @Versiion:1.0
- */
- @Service
- public class BannerServiceImpl implements BannerService {
- @Autowired
- private BannerMapper bannerMapper;
- @Override
- public List<BannerDO> list() {
- return bannerMapper.selectList(new QueryWrapper<>());
- }
- }
Controller
- package com.ybchen.shopmanager.controller;
- import com.ybchen.shopmanager.service.BannerService;
- import com.ybchen.shopmanager.utils.JsonData;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- /**
- * @Description:輪播圖Controller
- * @Author:chenyanbin
- * @Date:2021/3/4 下午11:06
- * @Versiion:1.0
- */
- @RestController
- @RequestMapping("api/v1/banner")
- public class BannerController {
- @Autowired
- private BannerService bannerService;
- @GetMapping("list")
- public JsonData list(){
- return JsonData.buildSuccess(bannerService.list());
- }
- }
測試
單元測試+控制臺打印sql
單元測試
- package com.ybchen.shopmanager;
- import com.ybchen.shopmanager.model.BannerDO;
- import com.ybchen.shopmanager.service.BannerService;
- import lombok.extern.slf4j.Slf4j;
- import org.junit.jupiter.api.Test;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
- import java.util.List;
- //classes=啟動類.class
- @SpringBootTest(classes = ShopManagerApplication.class)
- @Slf4j
- public class BannerTest {
- @Autowired
- private BannerService bannerService;
- @Test
- public void testBannerTest() {
- List<BannerDO> list = bannerService.list();
- log.info("輪播圖列表:{}", list);
- }
- }
配置文件
application.properties
- # 配置mybatis plus打印sql日志
- mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
測試
BaseMapperMapper
繼承該接口后,無需編寫mapper.xml文件,即可獲得CRUD功能
- /*
- * Copyright (c) 2011-2020, baomidou ([email protected]).
- * <p>
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * <p>
- * https://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
- package com.baomidou.mybatisplus.core.mapper;
- import com.baomidou.mybatisplus.core.conditions.Wrapper;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.baomidou.mybatisplus.core.toolkit.Constants;
- import org.apache.ibatis.annotations.Param;
- import java.io.Serializable;
- import java.util.Collection;
- import java.util.List;
- import java.util.Map;
- /*
- :`
- .:,
- :::,,.
- :: `::::::
- ::` `,:,` .:`
- `:: `::::::::.:` `:';,`
- ::::, .:::` `@++++++++:
- `` :::` @+++++++++++#
- :::, #++++++++++++++`
- ,: `::::::;'##++++++++++
- .@#@;` ::::::::::::::::::::;
- #@####@, :::::::::::::::+#;::.
- @@######+@:::::::::::::. #@:;
- , @@########':::::::::::: .#''':`
- ;##@@@+:##########@::::::::::: @#;.,:.
- #@@@######++++#####'::::::::: .##+,:#`
- @@@@@#####+++++'#####+::::::::` ,`::@#:`
- `@@@@#####++++++'#####+#':::::::::::@.
- @@@@######+++++''#######+##';::::;':,`
- @@@@#####+++++'''#######++++++++++`
- #@@#####++++++''########++++++++'
- `#@######+++++''+########+++++++;
- `@@#####+++++''##########++++++,
- @@######+++++'##########+++++#`
- @@@@#####+++++############++++;
- ;#@@@@@####++++##############+++,
- @@@@@@@@@@@###@###############++'
- @#@@@@@@@@@@@@###################+:
- `@#@@@@@@@@@@@@@@###################'`
- :@#@@@@@@@@@@@@@@@@@##################,
- ,@@@@@@@@@@@@@@@@@@@@################;
- ,#@@@@@@@@@@@@@@@@@@@##############+`
- .#@@@@@@@@@@@@@@@@@@#############@,
- @@@@@@@@@@@@@@@@@@@###########@,
- :#@@@@@@@@@@@@@@@@##########@,
- `##@@@@@@@@@@@@@@@########+,
- `+@@@@@@@@@@@@@@@#####@:`
- `:@@@@@@@@@@@@@@##@;.
- `,'@@@@##@@@+;,`
- ``...``
- _ _ /_ _ _/_. ____ / _
- / / //_//_//_|/ /_\ /_///_/_\ Talk is cheap. Show me the code.
- _/ /
- */
- /**
- * Mapper 繼承該接口后,無需編寫 mapper.xml 文件,即可獲得CRUD功能
- * <p>這個 Mapper 支持 id 泛型</p>
- *
- * @author hubin
- * @since 2016-01-23
- */
- public interface BaseMapper<T> extends Mapper<T> {
- /**
- * 插入一條記錄
- *
- * @param entity 實體對象
- */
- int insert(T entity);
- /**
- * 根據 ID 刪除
- *
- * @param id 主鍵ID
- */
- int deleteById(Serializable id);
- /**
- * 根據 columnMap 條件,刪除記錄
- *
- * @param columnMap 表字段 map 對象
- */
- int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
- /**
- * 根據 entity 條件,刪除記錄
- *
- * @param wrapper 實體對象封裝操作類(可以為 null)
- */
- int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper);
- /**
- * 刪除(根據ID 批量刪除)
- *
- * @param idList 主鍵ID列表(不能為 null 以及 empty)
- */
- int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
- /**
- * 根據 ID 修改
- *
- * @param entity 實體對象
- */
- int updateById(@Param(Constants.ENTITY) T entity);
- /**
- * 根據 whereEntity 條件,更新記錄
- *
- * @param entity 實體對象 (set 條件值,可以為 null)
- * @param updateWrapper 實體對象封裝操作類(可以為 null,里面的 entity 用于生成 where 語句)
- */
- int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);
- /**
- * 根據 ID 查詢
- *
- * @param id 主鍵ID
- */
- T selectById(Serializable id);
- /**
- * 查詢(根據ID 批量查詢)
- *
- * @param idList 主鍵ID列表(不能為 null 以及 empty)
- */
- List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
- /**
- * 查詢(根據 columnMap 條件)
- *
- * @param columnMap 表字段 map 對象
- */
- List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
- /**
- * 根據 entity 條件,查詢一條記錄
- *
- * @param queryWrapper 實體對象封裝操作類(可以為 null)
- */
- T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
- /**
- * 根據 Wrapper 條件,查詢總記錄數
- *
- * @param queryWrapper 實體對象封裝操作類(可以為 null)
- */
- Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
- /**
- * 根據 entity 條件,查詢全部記錄
- *
- * @param queryWrapper 實體對象封裝操作類(可以為 null)
- */
- List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
- /**
- * 根據 Wrapper 條件,查詢全部記錄
- *
- * @param queryWrapper 實體對象封裝操作類(可以為 null)
- */
- List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
- /**
- * 根據 Wrapper 條件,查詢全部記錄
- * <p>注意: 只返回第一個字段的值</p>
- *
- * @param queryWrapper 實體對象封裝操作類(可以為 null)
- */
- List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
- /**
- * 根據 entity 條件,查詢全部記錄(并翻頁)
- *
- * @param page 分頁查詢條件(可以為 RowBounds.DEFAULT)
- * @param queryWrapper 實體對象封裝操作類(可以為 null)
- */
- <E extends IPage<T>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
- /**
- * 根據 Wrapper 條件,查詢全部記錄(并翻頁)
- *
- * @param page 分頁查詢條件
- * @param queryWrapper 實體對象封裝操作類
- */
- <E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
- }
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查詢
分頁插件#
配置類#
- package com.ybchen.shopmanager.config;
- import com.baomidou.mybatisplus.annotation.DbType;
- import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
- import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- /**
- * @Description:分頁插件配置
- * @Author:chenyanbin
- * @Date:2021/3/5 下午10:32
- * @Versiion:1.0
- */
- @Configuration
- public class MybatisPlusPageConfig {
- /**
- * 舊版本
- */
- // @Bean
- // public PaginationInterceptor paginationInterceptor() {
- // PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
- // return paginationInterceptor;
- // }
- /**
- * 新的分頁插件,一級和二級緩存遵循mybatis的規則
- * 需要設置 MybatisConfiguration#useDeprecatedExecutor=false 避免緩存出現問題
- */
- @Bean
- public MybatisPlusInterceptor mybatisPlusInterceptor() {
- MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
- mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
- return mybatisPlusInterceptor;
- }
- }
演示類
自定義xml的sql腳本
新建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接口的路徑-->
- <mapper namespace="com.ybchen.shopmanager.mapper.BannerMapper">
- <select id="getList" resultType="com.ybchen.shopmanager.model.BannerDO">
- select * from banner
- </select>
- </mapper>
BannerMapper.java添加方法
- package com.ybchen.shopmanager.mapper;
- import com.baomidou.mybatisplus.core.mapper.BaseMapper;
- import com.ybchen.shopmanager.model.BannerDO;
- import java.util.List;
- /**
- * @Description:輪播圖Mapper
- * @Author:chenyanbin
- * @Date:2021/3/4 下午11:03
- * @Versiion:1.0
- */
- public interface BannerMapper extends BaseMapper<BannerDO> {
- List<BannerDO> getList();
- }
配置文件告訴mapper.xml路徑
application.properties
- # 默認配置路徑
- mybatis-plus.mapper-locations=classpath*:/mapper/*Mapper.xml
全局配置文件
注意config-location和configuration不能同時出現
修改配置文件
application.properties
- #配置全局配置文件!!!!
- mybatis-plus.config-location = classpath:mybatis-config.xml
新建mybatis-config.xml
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
- <settings>
- <!--控制臺輸出日志-->
- <setting name="logImpl" value="STDOUT_LOGGING"/>
- </settings>
- </configuration>
測試
配置實體類別名
修改application.properties
- # 配置實體類別名
- mybatis-plus.type-aliases-package=com.ybchen.shopmanager.model
測試
mybatis plus下劃線轉駝峰
默認就是true
修改application.properties
- # mybatis plus下劃線轉駝峰
- mybatis-plus.configuration.map-underscore-to-camel-case=true
配置全局默認主鍵類型
實體類上就不用加 @TableId(value="id",type=IdType.AUTO)
修改application.properties
- # 配置全局默認主鍵規則
- mybatis-plus.global-config.db-config.id-type=auto
完整application.properties
- # 端口號
- server.port=9999
- #===========數據庫相關=============
- spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
- spring.datasource.url=jdbc:mysql://127.0.0.1/shop?useUnicode=true&characterEncoding=utf-8&useSSL=false
- spring.datasource.username=root
- spring.datasource.password=root
- # 配置mybatis plus打印sql日志
- #mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
- # 默認配置路徑
- mybatis-plus.mapper-locations=classpath*:/mapper/*Mapper.xml
- #配置全局配置文件!!!!
- mybatis-plus.config-location = classpath:mybatis-config.xml
- # 配置實體類別名
- mybatis-plus.type-aliases-package=com.ybchen.shopmanager.model
- # mybatis plus下劃線轉駝峰
- mybatis-plus.configuration.map-underscore-to-camel-case=true
- # 配置全局默認主鍵規則
- mybatis-plus.global-config.db-config.id-type=auto
樂觀鎖
大多是基于數據版本(Version)記錄機制實現。即為數據增加一個版本標識,在基于數據庫表的版本解決方案中,一般通過為數據庫表增加一個“version”字段來實現。讀取數據時,將此版本號一同讀出,之后更新時,對此版本號加一。此時,將提交數據的版本數據與數據,庫表對應記錄的當前版本信息進行比較,如果提交的數據,版本號大于數據庫表當前的版本號,則予以更新,否則認為是過期數據。
實體類增加@version
增加樂觀鎖插件
- package com.ybchen.shopmanager.config;
- import com.baomidou.mybatisplus.annotation.DbType;
- import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
- import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
- import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- /**
- * @Description:分頁插件配置
- * @Author:chenyanbin
- * @Date:2021/3/5 下午10:32
- * @Versiion:1.0
- */
- @Configuration
- public class MybatisPlusPageConfig {
- /**
- * 舊版本
- */
- // @Bean
- // public PaginationInterceptor paginationInterceptor() {
- // PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
- // return paginationInterceptor;
- // }
- /**
- * 新的分頁插件,一級和二級緩存遵循mybatis的規則
- * 需要設置 MybatisConfiguration#useDeprecatedExecutor=false 避免緩存出現問題
- */
- @Bean
- public MybatisPlusInterceptor mybatisPlusInterceptor() {
- MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
- //分頁插件
- mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
- //樂觀鎖插件
- mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
- return mybatisPlusInterceptor;
- }
- }
使用
注意
- 樂觀鎖數據類型支持int、Integer、long、timestamp
- 僅支持updateById和update方法
邏輯刪除
公司在設計規范中都加入了邏輯刪除的強制規定,運營人員可以分析和審查數據,也方便將數據沉淀下來用于商業分析。
數據量過多,也會采用數據倉庫,通過監聽應用數據庫的數據變化,進行遷移到數據倉庫。
方式一
- 數據庫增加deleted字段,0是未刪除,1表示刪除
- 實體類增加屬性配置@TableLogic
- 查詢的時候會自動拼接上deleted=0的檢索條件
方式二
修改application.properties
- # 邏輯刪除,刪除是1
- mybatis-plus.global-config.db-config.logic-delete-value=1
- # 邏輯刪除,未刪除是0
- mybatis-plus.global-config.db-config.logic-not-delete-value=0
- # 如果java實體類沒加注解@TableLogic,則可以配置這個,推薦這里配置
- mybatis-plus.global-config.db-config.logic-delete-field=deleted
代碼生成器#
添加依賴#
- <!-- 代碼自動生成依賴 begin -->
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-generator</artifactId>
- <version>3.4.1</version>
- </dependency>
- <!-- velocity -->
- <dependency>
- <groupId>org.apache.velocity</groupId>
- <artifactId>velocity-engine-core</artifactId>
- <version>2.0</version>
- </dependency>
- <!-- 代碼自動生成依賴 end-->
生成器類#
- package com.ybchen.shopmanager;
- 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;
- /**
- * @Description:代碼生成器
- * @Author:chenyanbin
- * @Date:2021/3/6 下午5:10
- * @Versiion:1.0
- */
- public class MyBatisPlusGenerator {
- public static void main(String[] args) {
- //1. 全局配置
- GlobalConfig config = new GlobalConfig();
- // 是否支持AR模式
- config.setActiveRecord(true)
- // 作者
- .setAuthor("chenyanbin")
- // 生成路徑,最好使用絕對路徑,window路徑是不一樣的
- .setOutputDir("/Users/chenyanbin/IdeaProjects/shop-manager")
- // 文件覆蓋
- .setFileOverride(true)
- // 主鍵策略
- .setIdType(IdType.AUTO)
- .setDateType(DateType.ONLY_DATE)
- // 設置生成的service接口的名字的首字母是否為I,默認Service是以I開頭的
- .setServiceName("%sService")
- //實體類結尾名稱
- .setEntityName("%sDO")
- //生成基本的resultMap
- .setBaseResultMap(true)
- //不使用AR模式
- .setActiveRecord(false)
- //生成基本的SQL片段
- .setBaseColumnList(true);
- //2. 數據源配置
- DataSourceConfig dsConfig = new DataSourceConfig();
- // 設置數據庫類型
- dsConfig.setDbType(DbType.MYSQL)
- .setDriverName("com.mysql.cj.jdbc.Driver")
- .setUrl("jdbc:mysql://127.0.0.1:3306/shop?useSSL=false")
- .setUsername("root")
- .setPassword("root");
- //3. 策略配置globalConfiguration中
- StrategyConfig stConfig = new StrategyConfig();
- //全局大寫命名
- stConfig.setCapitalMode(true)
- // 數據庫表映射到實體的命名策略
- .setNaming(NamingStrategy.underline_to_camel)
- //使用lombok
- .setEntityLombokModel(true)
- //使用restcontroller注解
- .setRestControllerStyle(true)
- // 生成的表, 支持多表一起生成,以數組形式填寫
- .setInclude("product","banner","address","coupon","product_order");
- //4. 包名策略配置
- PackageConfig pkConfig = new PackageConfig();
- pkConfig.setParent("net.mybatisplus")
- .setMapper("mapper")
- .setService("service")
- .setController("controller")
- .setEntity("model")
- .setXml("mapper");
- //5. 整合配置
- AutoGenerator ag = new AutoGenerator();
- ag.setGlobalConfig(config)
- .setDataSource(dsConfig)
- .setStrategy(stConfig)
- .setPackageInfo(pkConfig);
- //6. 執行操作
- ag.execute();
- System.out.println("======= 代碼生成完畢 ========");
- }
- }
使用#
SpringBoot整合Swagger 3.x
添加依賴
- <!--springBoot整合swagger3.0-->
- <dependency>
- <groupId>io.springfox</groupId>
- <artifactId>springfox-boot-starter</artifactId>
- <version>3.0.0</version>
- </dependency>
修改application.properties
添加如下信息
- spring.application.name=shop-manager
- # ===== 自定義swagger配置 ===== #
- swagger.enable=true
- swagger.application-name= ${spring.application.name}
- swagger.application-version=1.0
- swagger.application-description=shop api
配置類
- package com.ybchen.shopmanager.config;
- import io.swagger.annotations.ApiOperation;
- import lombok.Data;
- import org.springframework.boot.context.properties.ConfigurationProperties;
- import org.springframework.context.annotation.Bean;
- import org.springframework.stereotype.Component;
- import springfox.documentation.builders.ApiInfoBuilder;
- import springfox.documentation.builders.PathSelectors;
- import springfox.documentation.builders.RequestHandlerSelectors;
- import springfox.documentation.oas.annotations.EnableOpenApi;
- import springfox.documentation.service.ApiInfo;
- import springfox.documentation.service.Contact;
- import springfox.documentation.spi.DocumentationType;
- import springfox.documentation.spring.web.plugins.Docket;
- /**
- * @Description:swagger配置類
- * @Author:chenyanbin
- * @Date:2021/3/5 下午10:32
- * @Versiion:1.0
- */
- @Component
- @Data
- @ConfigurationProperties("swagger")
- @EnableOpenApi
- public class SwaggerConfiguration {
- /**
- * 是否開啟swagger,生產環境一般關閉,所以這里定義一個變量
- */
- private Boolean enable;
- /**
- * 項目應用名
- */
- private String applicationName;
- /**
- * 項目版本信息
- */
- private String applicationVersion;
- /**
- * 項目描述信息
- */
- private String applicationDescription;
- @Bean
- public Docket docket(){
- return new Docket(DocumentationType.OAS_30)
- .pathMapping("/")
- // 定義是否開啟swagger,false為關閉,可以通過變量控制,線上關閉
- .enable(enable)
- //配置api文檔元信息
- .apiInfo(apiInfo())
- // 選擇哪些接口作為swagger的doc發布
- .select()
- //apis() 控制哪些接口暴露給swagger,
- // RequestHandlerSelectors.any() 所有都暴露
- // RequestHandlerSelectors.basePackage("net.ybchen.*") 指定包位置
- // withMethodAnnotation(ApiOperation.class)標記有這個注解 ApiOperation
- .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
- .paths(PathSelectors.any())
- .build();
- }
- private ApiInfo apiInfo() {
- return new ApiInfoBuilder()
- .title(applicationName)
- .description(applicationDescription)
- .contact(new Contact("陳彥斌", "https://www.cnblogs.com/chenyanbin/", "[email protected]"))
- .version(applicationVersion)
- .build();
- }
- }
啟動測試
訪問地址:http://localhost:9999/swagger-ui/index.html
注意:如果訪問不成功,看是否攔截器攔截了相關資源!!!!!
常用注解
@Api
用在controller類,描述API接口
- @Api(tags = "用戶模塊",value = "用戶UserController")
- public class UserController {
- }
@ApiOperation#
接口配置,用在方法上,描述接口方法
- @ApiOperation("分頁用戶列表")
- @GetMapping("list")
- public JsonData list(){
- ?
- return JsonData.buildSuccess();
- }
@ApiParam#
方法參數配置,用在入參上面,描述參數
- @ApiOperation("用戶登錄")
- @PostMapping("login")
- public JsonData login(
- @ApiParam(name = "phone", value = "手機號",example = "13888888888")
- @RequestParam("phone") String phone,
- ?
- @ApiParam(name = "pwd", value = "密碼",example = "123456")
- @RequestParam("pwd")String pwd){
- ?
- return JsonData.buildSuccess();
- }
@Apilgnore#
忽略此接口不生成文檔
- @ApiIgnore
- @ApiOperation("刪除用戶")
- @DeleteMapping("/delete/{id}")
- public JsonData deleteById(@PathVariable int id) {
- return JsonData.buildSuccess();
- }
@ApiModel#
用于類,表示對類進行說明,用于參數,用實體類接收
@ApiModelProperty#
用于方法,字段;表示對model屬性的說明或者數據操作更改
value:字段說明
name:重寫屬性名稱
dataType:重寫屬性類型
required:是否必填
example:舉例說明
hidden:隱藏
@Data
@ApiModel("用戶基本信息")
- public class SaveUserRequest {
- ?
- private int age;
- ?
- private String pwd;
- ?
- @ApiModelProperty(value ="【必填】郵箱",required = true)
- private String email;
- ?
- @ApiModelProperty("【必填】手機號")
- private String phone;
- ?
- @ApiModelProperty(value="創建時間")
- private Date createTime;
- ?
- }
@ApiResponse#
描述接口響應
- @ApiOperation("用戶登錄")
- @PostMapping("login")
- @ApiResponses({
- @ApiResponse(responseCode = CodeStatus.SUCCESS, description = "保存成功"),
- @ApiResponse(responseCode = CodeStatus.FAIL, description = "保存失敗")
- })
- public JsonData login(
- @ApiParam(name = "phone", value = "手機號",example = "13888888888")
- @RequestParam("phone") String phone,
- ?
- @ApiParam(name = "pwd", value = "密碼",example = "123456")
- @RequestParam("pwd")String pwd){
- ?
- return JsonData.buildSuccess();
- }
項目源碼下載
鏈接: https://pan.baidu.com/s/1OaOG0xK6jl8zDweAMkggAQ 提取碼: ed54
到此這篇關于SpringBoot 開發提速神器 Lombok+MybatisPlus+SwaggerUI的文章就介紹到這了,更多相關SpringBoot Lombok+MybatisPlus+SwaggerUI內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://www.cnblogs.com/chenyanbin/p/mybatis-plus.html