图文结合手把手教你创建SpringCloud项目

打印 上一主题 下一主题

主题 924|帖子 924|积分 2772

媒介
什么是SpringCloud?

Spring Cloud 是一系列框架的有序聚集,它使用 Spring Boot 的开发便利性简化了分布式系统的开发,比如服务注册、服务发现、网关、路由、链路追踪等。Spring Cloud 并不是重复造轮子,而是将市面上开发得比较好的模块集成进去,进行封装,从而减少了各模块的开发成本。也可以说Spring Cloud 提供了构建分布式系统所需的“全家桶”。
SpringCloud的优缺点:

优点:

  • 简化开发: 提供了丰富的组件和模式,可以快速开发分布式系统。
  • 微服务支持: 支持微服务架构,提供了服务注册与发现、负载均衡等功能。
  • 分布式配置管理: 提供了分布式配置管理的本领,可以动态管理配置信息。
  • 监控与管理: 提供了监控、管理和调优的工具,方便运维管理和故障排查。
  • 生态系统: 有庞大的社区支持和活跃的开发,生态系统美满。
缺点:
配置繁多且复杂,体量越大,摆设治理成本越高,倒霉于维护,对团队挑战大
版本兼容性:必要留意 Spring Cloud 各个组件的版本兼容性,不同版本之间大概存在不兼容的情况。
1.SpringCloud版本选型

确定使用SpringCloud-alibaba的版本,这里选择(2021.0.4.0)
 
 
2.选择SpringCloud、SpringBoot版本
  1. https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明  
  2. 从上边网页中找到 Springcloud-alibaba 2021.0.4.0 所对应的版本 ,如下图:
  3. 这里使用的JDK 为 11.0.18
  4. Spring Cloud Version 对应的版本为 Spring Cloud 2021.0.4   
  5. Spring Boot Version  对应的版本为 2.6.11
复制代码
 
 

 
3.选好版本,开始搭建SpringCloud项目

 最好的训练就是动手实践,接下来我们要创建一个父工程,管理下边的不同服务(不同业务放到不同的服务中去,各个服务相互调用)。全程使用Maven进行搭建。
一. 构建父工程

 构建父工程, 点击 File -> New -> Project

二. 创建项目

 选择创建Maven项目,选择JDK ,点击Next

三. 填写相干名称

 填写 Name、 GroupId、ArtifactId、Version ,填写完成,点击Finish

四. 配置父工程pom.xml

项目的父工程已经建好了,根据我们前边选择的版本依赖配置父工程pom.xml
父工程不必要写业务代码,可以删除src文件目次和没用的文件。
 
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <modelVersion>4.0.0</modelVersion>
  6.     <groupId>com.waves</groupId>
  7.     <artifactId>wavesservice</artifactId>
  8.     <version>1.0-SNAPSHOT</version>
  9.     <properties>
  10.         <maven.compiler.source>8</maven.compiler.source>
  11.         <maven.compiler.target>8</maven.compiler.target>
  12.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  13.         <spring-boot.version>2.6.11</spring-boot.version>
  14.         <spring-cloud.version>2021.0.4</spring-cloud.version>
  15.         <spring-dloud-alibaba.version>2021.0.4.0</spring-dloud-alibaba.version>
  16.         <lombok.version>1.18.10</lombok.version>
  17.         <log4j.version>1.2.17</log4j.version>
  18.         <mysql.version>8.0.29</mysql.version>
  19.         <druid.version>1.2.11</druid.version>
  20.         <mybatisPlus.spring.boot.version>3.5.3</mybatisPlus.spring.boot.version>
  21.         <amqp.version>2.3.9.RELEASE</amqp.version>
  22.         <junit.version>4.12</junit.version>
  23.         <test-version>2.3.9.RELEASE</test-version>
  24.         <jackson-version>2.11.4</jackson-version>
  25.         <aop.version>2.4.5</aop.version>
  26.         <commons-collections.version>3.2.2</commons-collections.version>
  27.         <fastjson.version>2.0.12</fastjson.version>
  28.         <pagehelper.boot.version>1.4.3</pagehelper.boot.version>
  29.         <lombok.version>1.18.24</lombok.version>
  30.         <hutool.core.version>5.8.20</hutool.core.version>
  31.         <hutool.all.version>5.8.20</hutool.all.version>
  32.         <bootstrap.version>3.0.1</bootstrap.version>
  33.     </properties>
  34.    
  35.     <dependencyManagement>
  36.         <dependencies>
  37.             
  38.             <dependency>
  39.                 <groupId>org.springframework.cloud</groupId>
  40.                 <artifactId>spring-cloud-dependencies</artifactId>
  41.                 <version>${spring-cloud.version}</version>
  42.                 <type>pom</type>
  43.                 <scope>import</scope>
  44.             </dependency>
  45.             
  46.             <dependency>
  47.                 <groupId>org.springframework.boot</groupId>
  48.                 <artifactId>spring-boot-dependencies</artifactId>
  49.                 <version>${spring-boot.version}</version>
  50.                 <type>pom</type>
  51.                 <scope>import</scope>
  52.             </dependency>
  53.             
  54.             <dependency>
  55.                 <groupId>com.alibaba.cloud</groupId>
  56.                 <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  57.                 <version>${spring-dloud-alibaba.version}</version>
  58.                 <type>pom</type>
  59.                 <scope>import</scope>
  60.             </dependency>
  61.             
  62.             <dependency>
  63.                 <groupId>org.projectlombok</groupId>
  64.                 <artifactId>lombok</artifactId>
  65.                 <version>${lombok.version}</version>
  66.             </dependency>
  67.             
  68.             <dependency>
  69.                 <groupId>mysql</groupId>
  70.                 <artifactId>mysql-connector-java</artifactId>
  71.                 <version>${mysql.version}</version>
  72.                 <scope>runtime</scope>
  73.             </dependency>
  74.             
  75.             <dependency>
  76.                 <groupId>com.alibaba</groupId>
  77.                 <artifactId>druid-spring-boot-starter</artifactId>
  78.                 <version>${druid.version}</version>
  79.             </dependency>
  80.             
  81.             <dependency>
  82.                 <groupId>com.baomidou</groupId>
  83.                 <artifactId>mybatis-plus-boot-starter</artifactId>
  84.                 <version>${mybatisPlus.spring.boot.version}</version>
  85.             </dependency>
  86.             
  87.             <dependency>
  88.                 <groupId>junit</groupId>
  89.                 <artifactId>junit</artifactId>
  90.                 <version>${junit.version}</version>
  91.             </dependency>
  92.             
  93.             <dependency>
  94.                 <groupId>log4j</groupId>
  95.                 <artifactId>log4j</artifactId>
  96.                 <version>${log4j.version}</version>
  97.             </dependency>
  98.             
  99.             <dependency>
  100.                 <groupId>org.springframework.boot</groupId>
  101.                 <artifactId>spring-boot-starter-test</artifactId>
  102.                 <version>${test-version}</version>
  103.             </dependency>
  104.             
  105.             <dependency>
  106.                 <groupId>commons-collections</groupId>
  107.                 <artifactId>commons-collections</artifactId>
  108.                 <version>${commons-collections.version}</version>
  109.             </dependency>
  110.             
  111.             <dependency>
  112.                 <groupId>com.alibaba.fastjson2</groupId>
  113.                 <artifactId>fastjson2</artifactId>
  114.                 <version>${fastjson.version}</version>
  115.             </dependency>
  116.             
  117.             <dependency>
  118.                 <groupId>com.github.pagehelper</groupId>
  119.                 <artifactId>pagehelper-spring-boot-starter</artifactId>
  120.                 <version>${pagehelper.boot.version}</version>
  121.             </dependency>
  122.             
  123.             <dependency>
  124.                 <groupId>org.springframework.boot</groupId>
  125.                 <artifactId>spring-boot-starter-aop</artifactId>
  126.                 <version>${aop.version}</version>
  127.             </dependency>
  128.             
  129.             <dependency>
  130.                 <groupId>cn.hutool</groupId>
  131.                 <artifactId>hutool-core</artifactId>
  132.                 <version>${hutool.core.version}</version>
  133.             </dependency>
  134.             
  135.             <dependency>
  136.                 <groupId>cn.hutool</groupId>
  137.                 <artifactId>hutool-all</artifactId>
  138.                 <version>${hutool.all.version}</version>
  139.             </dependency>
  140.             
  141.             <dependency>
  142.                 <groupId>org.springframework.cloud</groupId>
  143.                 <artifactId>spring-cloud-starter-bootstrap</artifactId>
  144.                 <version>${bootstrap.version}</version>
  145.             </dependency>
  146.         </dependencies>
  147.     </dependencyManagement>
  148.     <build>
  149.         <plugins>
  150.             <plugin>
  151.                 <groupId>org.apache.maven.plugins</groupId>
  152.                 <artifactId>maven-compiler-plugin</artifactId>
  153.                 <version>3.8.0</version>
  154.                 <configuration>
  155.                     <source>${java.version}</source>
  156.                     <target>${java.version}</target>
  157.                     <release>11</release>
  158.                     <encoding>${project.build.sourceEncoding}</encoding>
  159.                 </configuration>
  160.             </plugin>
  161.         </plugins>
  162.         <pluginManagement>
  163.             <plugins>
  164.                 <plugin>
  165.                     <groupId>org.springframework.boot</groupId>
  166.                     <artifactId>spring-boot-maven-plugin</artifactId>
  167.                     <version>${spring-boot.version}</version>
  168.                     <executions>
  169.                         <execution>
  170.                             <goals>
  171.                                 <goal>repackage</goal>
  172.                             </goals>
  173.                         </execution>
  174.                     </executions>
  175.                 </plugin>
  176.             </plugins>
  177.         </pluginManagement>
  178.     </build>
  179.     <repositories>
  180.         <repository>
  181.             <id>public</id>
  182.             <name>aliyun nexus</name>
  183.             <url>https://maven.aliyun.com/repository/public</url>
  184.             <releases>
  185.                 <enabled>true</enabled>
  186.             </releases>
  187.         </repository>
  188.     </repositories>
  189.     <pluginRepositories>
  190.         <pluginRepository>
  191.             <id>public</id>
  192.             <name>aliyun nexus</name>
  193.             <url>https://maven.aliyun.com/repository/public</url>
  194.             <releases>
  195.                 <enabled>true</enabled>
  196.             </releases>
  197.             <snapshots>
  198.                 <enabled>false</enabled>
  199.             </snapshots>
  200.         </pluginRepository>
  201.     </pluginRepositories>
  202. </project>
复制代码
五. 创建子模块(服务)

完成上述步调,我们的父工程就已经搭建完成了。接下来就可以继承搭建其他的微服务工程了。首先搭建一个公共模块,为其他服务提供公共服务。
选中父工程,右键点击 New -> Module

六. 选择Maven ,JDK

 这里与构建父工程一致,选择Maven,选择本身本机安装的JDK ,点击Next

七. 填写模块服务名称

填写子模块服务名称, 点击Finish 。

 到这里我们就创建好一个common父服务了。
八. 新建 cloud-common-core模块

 在common下边新建cloud-common-core模块
 和上述创建模块一样  New -> Module

 选择Maven ,JDK

 填写模块名称,父模块为cloud-common

 将父工程(四. 配置父工程pom.xml)声明的依赖添加到cloud-common-core的pom.xml中
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <parent>
  6.         <artifactId>cloud-common</artifactId>
  7.         <groupId>com.waves</groupId>
  8.         <version>1.0-SNAPSHOT</version>
  9.     </parent>
  10.     <modelVersion>4.0.0</modelVersion>
  11.     <artifactId>cloud-common-core</artifactId>
  12.     <properties>
  13.         <maven.compiler.source>11</maven.compiler.source>
  14.         <maven.compiler.target>11</maven.compiler.target>
  15.     </properties>
  16.     <dependencies>
  17.         
  18.         <dependency>
  19.             <groupId>org.springframework</groupId>
  20.             <artifactId>spring-context-support</artifactId>
  21.         </dependency>
  22.         
  23.         <dependency>
  24.             <groupId>org.springframework</groupId>
  25.             <artifactId>spring-web</artifactId>
  26.         </dependency>
  27.         
  28.         <dependency>
  29.             <groupId>mysql</groupId>
  30.             <artifactId>mysql-connector-java</artifactId>
  31.         </dependency>
  32.         
  33.         <dependency>
  34.             <groupId>org.projectlombok</groupId>
  35.             <artifactId>lombok</artifactId>
  36.         </dependency>
  37.         
  38.         <dependency>
  39.             <groupId>com.alibaba</groupId>
  40.             <artifactId>druid-spring-boot-starter</artifactId>
  41.         </dependency>
  42.         
  43.         <dependency>
  44.             <groupId>com.baomidou</groupId>
  45.             <artifactId>mybatis-plus-boot-starter</artifactId>
  46.         </dependency>
  47.         
  48.         <dependency>
  49.             <groupId>log4j</groupId>
  50.             <artifactId>log4j</artifactId>
  51.         </dependency>
  52.         
  53.         <dependency>
  54.             <groupId>commons-collections</groupId>
  55.             <artifactId>commons-collections</artifactId>
  56.         </dependency>
  57.         
  58.         <dependency>
  59.             <groupId>com.alibaba.fastjson2</groupId>
  60.             <artifactId>fastjson2</artifactId>
  61.         </dependency>
  62.         
  63.         <dependency>
  64.             <groupId>com.github.pagehelper</groupId>
  65.             <artifactId>pagehelper-spring-boot-starter</artifactId>
  66.         </dependency>
  67.         
  68.         <dependency>
  69.             <groupId>org.springframework.boot</groupId>
  70.             <artifactId>spring-boot-starter-aop</artifactId>
  71.         </dependency>
  72.         
  73.         <dependency>
  74.             <groupId>cn.hutool</groupId>
  75.             <artifactId>hutool-core</artifactId>
  76.         </dependency>
  77.         
  78.         <dependency>
  79.             <groupId>cn.hutool</groupId>
  80.             <artifactId>hutool-all</artifactId>
  81.         </dependency>
  82.         
  83.         <dependency>
  84.             <groupId>org.springframework.cloud</groupId>
  85.             <artifactId>spring-cloud-starter-bootstrap</artifactId>
  86.         </dependency>
  87.     </dependencies>
  88. </project>
复制代码
九. 增长MybatisPlusConfig配置

项目中使用的是MybatisPlus,所以在cloud-common-core增长MybatisPlusConfig配置
  1. package com.waves.core.config;
  2. import com.baomidou.mybatisplus.annotation.DbType;
  3. import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
  4. import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
  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. * @author waves
  11. * @date 2024/4/24 17:06
  12. */
  13. @Configuration
  14. public class MybatisPlusConfig {
  15.     @Bean
  16.     public MybatisPlusInterceptor mybatisPlusInterceptor() {
  17.         MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  18.         // 添加分页插件
  19.         interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
  20.         // 添加执行分析插件
  21.         interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
  22.         // 添加乐观锁插件
  23.         interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
  24.         return interceptor;
  25.     }
  26. }
复制代码
十. 封装公共响应体

在cloud-common-core封装公共响应体,
创建响应码常量
  1. /**
  2. * 返回状态码
  3. *
  4. * @author waves
  5. * @date 2024/4/24 17:06
  6. */
  7. public class HttpStatus {
  8.     /** 操作成功 */
  9.     public static int SUCCESS = 100;
  10.     /** 警告消息 */
  11.     public static int WARM = 101;
  12.     /** 操作失败 */
  13.     public static int ERROR = 103;
  14. }
复制代码
 创建ResponseResult
  1. package com.waves.core.web.domain;
  2. import com.waves.core.constant.HttpStatus;
  3. import java.util.HashMap;
  4. import java.util.Objects;
  5. /**
  6. * @author waves
  7. * @date 2024/4/24 17:28
  8. */
  9. public class ResponseResult extends HashMap<String, Object> {
  10.     private static final long serialVersionUID = 1L;
  11.     /** 状态码 */
  12.     public static final String CODE_TAG = "code";
  13.     /** 返回内容 */
  14.     public static final String MSG_TAG = "message";
  15.     /** 数据对象 */
  16.     public static final String DATA_TAG = "data";
  17.     /** 无参构造对象 初始化一个对象,表示一个空消息 */
  18.     public ResponseResult(){
  19.     }
  20.     /**
  21.      * 初始化一个新创建的 ResponseResult 对象
  22.      *
  23.      * @param code 状态码
  24.      * @param msg 返回内容
  25.      */
  26.     public ResponseResult(int code, String msg)
  27.     {
  28.         super.put(CODE_TAG, code);
  29.         super.put(MSG_TAG, msg);
  30.     }
  31.     /**
  32.      * 初始化一个新创建的 ResponseResult 对象
  33.      *
  34.      * @param code 状态码
  35.      * @param msg 返回内容
  36.      * @param data 数据对象
  37.      */
  38.     public ResponseResult(int code, String msg, Object data)
  39.     {
  40.         super.put(CODE_TAG, code);
  41.         super.put(MSG_TAG, msg);
  42.         if (Objects.nonNull(data))
  43.         {
  44.             super.put(DATA_TAG, data);
  45.         }
  46.     }
  47.     /**
  48.      * 返回成功消息
  49.      *
  50.      * @return 成功消息
  51.      */
  52.     public static ResponseResult success()
  53.     {
  54.         return ResponseResult.success("操作成功");
  55.     }
  56.     /**
  57.      * 返回成功数据
  58.      *
  59.      * @return 成功消息
  60.      */
  61.     public static ResponseResult success(Object data)
  62.     {
  63.         return ResponseResult.success("操作成功", data);
  64.     }
  65.     /**
  66.      * 返回成功消息
  67.      *
  68.      * @param msg 返回内容
  69.      * @return 成功消息
  70.      */
  71.     public static ResponseResult success(String msg)
  72.     {
  73.         return ResponseResult.success(msg, null);
  74.     }
  75.     /**
  76.      * 返回成功消息
  77.      *
  78.      * @param msg 返回内容
  79.      * @param data 数据对象
  80.      * @return 成功消息
  81.      */
  82.     public static ResponseResult success(String msg, Object data)
  83.     {
  84.         return new ResponseResult(HttpStatus.SUCCESS, msg, data);
  85.     }
  86.     /**
  87.      * 返回警告消息
  88.      *
  89.      * @param msg 返回内容
  90.      * @return 警告消息
  91.      */
  92.     public static ResponseResult warn(String msg)
  93.     {
  94.         return ResponseResult.warn(msg, null);
  95.     }
  96.     /**
  97.      * 返回警告消息
  98.      *
  99.      * @param msg 返回内容
  100.      * @param data 数据对象
  101.      * @return 警告消息
  102.      */
  103.     public static ResponseResult warn(String msg, Object data)
  104.     {
  105.         return new ResponseResult(HttpStatus.WARN, msg, data);
  106.     }
  107.     /**
  108.      * 返回错误消息
  109.      *
  110.      * @return 错误消息
  111.      */
  112.     public static ResponseResult error()
  113.     {
  114.         return ResponseResult.error("操作失败");
  115.     }
  116.     /**
  117.      * 返回错误消息
  118.      *
  119.      * @param msg 返回内容
  120.      * @return 错误消息
  121.      */
  122.     public static ResponseResult error(String msg)
  123.     {
  124.         return ResponseResult.error(msg, null);
  125.     }
  126.     /**
  127.      * 返回错误消息
  128.      *
  129.      * @param msg 返回内容
  130.      * @param data 数据对象
  131.      * @return 错误消息
  132.      */
  133.     public static ResponseResult error(String msg, Object data)
  134.     {
  135.         return new ResponseResult(HttpStatus.ERROR, msg, data);
  136.     }
  137.     /**
  138.      * 返回错误消息
  139.      *
  140.      * @param code 状态码
  141.      * @param msg 返回内容
  142.      * @return 错误消息
  143.      */
  144.     public static ResponseResult error(int code, String msg)
  145.     {
  146.         return new ResponseResult(code, msg, null);
  147.     }
  148.     /**
  149.      * 是否为成功消息
  150.      *
  151.      * @return 结果
  152.      */
  153.     public boolean isSuccess()
  154.     {
  155.         return Objects.equals(HttpStatus.SUCCESS, this.get(CODE_TAG));
  156.     }
  157.     /**
  158.      * 是否为警告消息
  159.      *
  160.      * @return 结果
  161.      */
  162.     public boolean isWarn()
  163.     {
  164.         return Objects.equals(HttpStatus.WARN, this.get(CODE_TAG));
  165.     }
  166.     /**
  167.      * 是否为错误消息
  168.      *
  169.      * @return 结果
  170.      */
  171.     public boolean isError()
  172.     {
  173.         return Objects.equals(HttpStatus.ERROR, this.get(CODE_TAG));
  174.     }
  175.     /**
  176.      * 方便链式调用
  177.      *
  178.      * @param key
  179.      * @param value
  180.      * @return
  181.      */
  182.     @Override
  183.     public ResponseResult put(String key, Object value)
  184.     {
  185.         super.put(key, value);
  186.         return this;
  187.     }
  188. }
复制代码
十一. 创建支付服务

与创建cloud-common同理创建cloud-provider-payment服务
在cloud-provider-payment模块的pom.xml中引入cloud-common-core,spring-boot-starter-web 的依赖
 
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <parent>
  6.         <artifactId>wavesservice</artifactId>
  7.         <groupId>com.waves</groupId>
  8.         <version>1.0-SNAPSHOT</version>
  9.     </parent>
  10.     <modelVersion>4.0.0</modelVersion>
  11.     <artifactId>cloud-provider-payment</artifactId>
  12.     <properties>
  13.         <maven.compiler.source>11</maven.compiler.source>
  14.         <maven.compiler.target>11</maven.compiler.target>
  15.     </properties>
  16.     <dependencies>
  17.         
  18.         <dependency>
  19.             <groupId>org.springframework.boot</groupId>
  20.             <artifactId>spring-boot-starter-web</artifactId>
  21.         </dependency>
  22.         
  23.         <dependency>
  24.             <groupId>com.waves</groupId>
  25.             <artifactId>cloud-common-core</artifactId>
  26.         </dependency>
  27.     </dependencies>
  28. </project>
复制代码
十二.编写支付代码和接口

1. 编写bootstrap.yml配置文件

因为使用的时MybatisPlus,只MybatisPlus配置,不必要配置Mybatis
  1. # 服务端口
  2. server:
  3.   port: 8088
  4.   servlet:
  5.     # 服务访问路径
  6.     context-path: /paymentservice
  7. spring:
  8.   application:
  9.     # 服务名称
  10.     name: paymentservice
  11.   datasource:
  12.     type: com.alibaba.druid.pool.DruidDataSource
  13.     driverClassName: com.mysql.cj.jdbc.Driver
  14.     druid:
  15.       url: jdbc:mysql://localhost:3306/waves_cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
  16.       username: root
  17.       password: root
  18.   #mybatis:
  19.   #配置mapper的扫描,找到所有的mapper:xml映射文件:
  20.   #  mapper-locations: classpath:mapper/*.xml
  21.   # 搜索指定包别名
  22. #  type-aliases-package: com.waves.**.domain
  23. mybatis-plus:
  24.   # 不支持多包, 如有需要可在注解配置 或 提升扫包等级
  25.   # 例如 com.**.**.mapper
  26.   mapperPackage: com.waves.**.mapper
  27.   # 对应的 XML 文件位置
  28.   mapperLocations: classpath*:mapper/**/*Mapper.xml
  29.   # 实体扫描,多个package用逗号或者分号分隔
  30.   typeAliasesPackage: com.waves.**.domain
  31.   # 启动时是否检查 MyBatis XML 文件的存在,默认不检查
  32.   checkConfigLocation: false
  33.   configuration:
  34.     # 自动驼峰命名规则(camel case)映射
  35.     mapUnderscoreToCamelCase: false
  36.     # MyBatis 自动映射策略
  37.     # NONE:不启用 PARTIAL:只对非嵌套 resultMap 自动映射 FULL:对所有 resultMap 自动映射
  38.     autoMappingBehavior: PARTIAL
  39.     # MyBatis 自动映射时未知列或未知属性处理策
  40.     # NONE:不做处理 WARNING:打印相关警告 FAILING:抛出异常和详细信息
  41.     autoMappingUnknownColumnBehavior: NONE
  42.     # 更详细的日志输出 会有性能损耗 org.apache.ibatis.logging.stdout.StdOutImpl
  43.     # 关闭日志记录 (可单纯使用 p6spy 分析) org.apache.ibatis.logging.nologging.NoLoggingImpl
  44.     # 默认日志输出 org.apache.ibatis.logging.slf4j.Slf4jImpl
  45.     logImpl: org.apache.ibatis.logging.nologging.NoLoggingImpl
  46.   global-config:
  47.     # 是否打印 Logo banner
  48.     banner: true
  49.     dbConfig:
  50.       # 主键类型
  51.       # AUTO 自增 NONE 空 INPUT 用户输入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUID
  52.       idType: ASSIGN_ID
  53.       # 逻辑已删除值
  54.       logicDeleteValue: 2
  55.       # 逻辑未删除值
  56.       logicNotDeleteValue: 0
  57.       # 字段验证策略之 insert,在 insert 的时候的字段验证策略
  58.       # IGNORED 忽略 NOT_NULL 非NULL NOT_EMPTY 非空 DEFAULT 默认 NEVER 不加入 SQL
  59.       insertStrategy: NOT_NULL
  60.       # 字段验证策略之 update,在 update 的时候的字段验证策略
  61.       updateStrategy: NOT_NULL
  62.       # 字段验证策略之 select,在 select 的时候的字段验证策略既 wrapper 根据内部 entity 生成的 where 条件
  63.       where-strategy: NOT_NULL
  64. # 日志配置
  65. logging:
  66.   pattern:
  67.     dateformat: MM-dd HH:mm:ss:SSS
  68.   level:
  69.     com.waves: debug
  70.     org.springframework: warn
复制代码
 2.编写Payment支付服务的启动类
  1. package com.waves.payment;
  2. import org.mybatis.spring.annotation.MapperScan;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.context.annotation.ComponentScan;
  6. /**
  7. * @author waves
  8. * @date 2024/4/24 22:39
  9. */
  10. @SpringBootApplication
  11. @MapperScan("${mybatis-plus.mapperPackage}") // 配置要扫描的包
  12. //@ComponentScan(basePackages = {"com.waves.core", "com.waves.payment"}) //配置要扫描的组件和配置
  13. @ComponentScan("com.waves")
  14. public class PaymentApplication {
  15.     public static void main(String[] args) {
  16.         SpringApplication.run(PaymentApplication.class,args);
  17.         System.out.println("支付服务启动成功 (^-^)V。。。。");
  18.     }
  19. }
复制代码
 3.建表
  1. #创建sys_payment_type 支付类型表
  2. CREATE TABLE `sys_payment_type`  (
  3.   `pay_id` bigint(20) NOT NULL COMMENT '支付类型主键',
  4.   `pay_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '支付类型名称',
  5.   `remark` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',
  6.   PRIMARY KEY (`pay_id`) USING BTREE
  7. ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = DYNAMIC;
  8. #插入数据
  9. INSERT INTO `sys_payment_type` (`pay_id`, `pay_name`, `remark`) VALUES (1, '支付宝', '使用支付宝进行支付');
  10. INSERT INTO `sys_payment_type` (`pay_id`, `pay_name`, `remark`) VALUES (2, '微信支付', '使用微信支付进行支付');
  11. INSERT INTO `sys_payment_type` (`pay_id`, `pay_name`, `remark`) VALUES (3, '银行转账', '通过银行转账进行支付');
复制代码
4.编写接口


  • 实体类
   在cloud-common-core 中编写 payment实体类
  1. package com.waves.core.web.domain.entities;
  2. import com.baomidou.mybatisplus.annotation.IdType;
  3. import com.baomidou.mybatisplus.annotation.TableField;
  4. import com.baomidou.mybatisplus.annotation.TableId;
  5. import com.baomidou.mybatisplus.annotation.TableName;
  6. import lombok.AllArgsConstructor;
  7. import lombok.Data;
  8. import lombok.NoArgsConstructor;
  9. import lombok.experimental.Accessors;
  10. import java.io.Serializable;
  11. /**
  12. * 支付类型实体 如果进行网络通信 一定要实现序列化
  13. * @author waves
  14. * @date 2024/4/25 9:44
  15. */
  16. @Data //: 该注解会自动生成类的 getter、setter、equals、hashCode 和 toString 方法,从而减少样板代码。
  17. @NoArgsConstructor //: 自动生成一个无参构造方法,用于创建对象实例时不需要传入任何参数。
  18. @AllArgsConstructor //: 自动生成一个包含所有参数的构造方法,用于创建对象实例时需要传入所有字段的值。
  19. @Accessors(chain = true) //: 启用方法链(method chaining),允许在对象实例上连续调用多个 setter 方法,可以使代码更加简洁。
  20. @TableName("sys_payment_type") //:对应数据库表的名称
  21. public class SysPaymentType implements Serializable {
  22.     /**
  23.      * 支付Id
  24.      * TableId 加在表主键上面 value 对应 字段名 ,type 为数据库ID自增
  25.      */
  26.     @TableId(value = "pay_id", type = IdType.AUTO)
  27.     private Long payId;
  28.     /**
  29.      * 支付类型名称
  30.      * TableField value 对应 字段名
  31.      */
  32.     @TableField(value = "pay_name")
  33.     private String payName;
  34.     /**
  35.      * 备注
  36.      */
  37.     @TableField(value = "remark")
  38.     private String remark;
  39. }
复制代码
 
 mapper

 SysPaymentMapper继承MybatisPlus 的 BaseMapper
  1. package com.waves.payment.web.mapper;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import com.waves.core.web.domain.entities.SysPaymentType;
  4. /**
  5. * @author waves
  6. * @date 2024/4/25 9:44
  7. */
  8. @Mapper
  9. public interface SysPaymentMapper extends BaseMapper<SysPaymentType> {
  10. }
复制代码
Service

ISysPaymentService 继承MybatisPlus 的 IService
  1. package com.waves.payment.web.service;
  2. import com.baomidou.mybatisplus.extension.service.IService;
  3. import com.waves.core.web.domain.entities.SysPaymentType;
  4. /**
  5. * @author waves
  6. * @date 2024/4/25 9:44
  7. */
  8. @Service
  9. public interface ISysPaymentService extends IService<SysPaymentType> {
  10. }
复制代码
ServiceImpl

SysPaymentServiceImpl继承 继承MybatisPlus 的 IService 的 ServiceImpl 同时实现 我们本身的ISysPaymentService
  1. package com.waves.payment.web.service.impl;
  2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3. import com.waves.core.web.domain.entities.SysPaymentType;
  4. import com.waves.payment.web.mapper.SysPaymentMapper;
  5. import com.waves.payment.web.service.ISysPaymentService;
  6. import org.springframework.stereotype.Service;
  7. /**
  8. * @author waves
  9. * @date 2024/4/25 9:44
  10. */
  11. @Service
  12. public class SysPaymentServiceImpl extends ServiceImpl<SysPaymentMapper,SysPaymentType> implements ISysPaymentService {
  13. }
复制代码
 Controller
  1. package com.waves.payment.web.controller;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.waves.core.web.domain.entities.SysPaymentType;
  6. import com.waves.payment.web.service.ISysPaymentService;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.web.bind.annotation.GetMapping;
  9. import org.springframework.web.bind.annotation.PathVariable;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.RestController;
  12. import java.util.Objects;
  13. /**
  14. * @author waves
  15. * @date 2024/4/25 9:44
  16. */
  17. @RestController
  18. @RequestMapping("/payment")
  19. public class SysPaymentController {
  20.     @Autowired
  21.     private ISysPaymentService paymentService;
  22.     /**
  23.      * 分页查询PaymentType,条件 payId ,payName
  24.      * @return
  25.      */
  26.     @GetMapping("/listPage/{pageNum}/{pageSize}")
  27.     public IPage<SysPaymentType> list(@PathVariable("pageNum") Integer pageNum
  28.             , @PathVariable("pageSize") Integer pageSize
  29.             , SysPaymentType paymentType){
  30.         QueryWrapper<SysPaymentType> queryWrapper = new QueryWrapper<>();
  31.         //判断支付类型名称 不为空,则进行条件查询
  32.         queryWrapper.lambda()
  33.                 .like(Objects.nonNull(paymentType.getPayName()),SysPaymentType::getPayName,paymentType.getPayName())
  34.                 .eq(Objects.nonNull(paymentType.getPayId()),SysPaymentType::getPayId,paymentType.getPayId());
  35.         return paymentService.page(new Page<>(pageNum,pageSize),queryWrapper);
  36.     }
  37.     /**
  38.      * 根据支付Id查询支付类型
  39.      * @param payId
  40.      * @return
  41.      */
  42.     @GetMapping("/findById/{payId}")
  43.     public SysPaymentType findById(@PathVariable("payId") Long payId){
  44.         return paymentService.getById(payId);
  45.     }
  46. }
复制代码
测试接口


 
测试根据ID查询
http://localhost:8088/paymentservice/payment/findById/1
返回数据如下图

 到这里我们的项目就搭建完成了,下为项目结构图
 

 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

道家人

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表