初学SpringCloud:将我们每一个微服务模块中都会用到的一些实体类的代码抽取出来,组成一个微服务,然后install一下。其他的微服务模块可以写依赖调用,减少代码冗余。

目录

1、背景介绍

2、我的包含公用实体类的微服务模块的POM文件解析

3、我的目录结构

4、我的CommonResult实体类

5、我的Payment类

6、我们写好了代码以后的操作


我的上一篇博客:

初学SpringCloud:使用Eureka作为服务注册中心,写服务注册中心的微服务模块

1、背景介绍

我目前正在练习一个简单的微服务架构的项目。需要使用到实体类,这些实体类在很多的微服务模块中都会用到。为了减少代码的冗余,我现在要把这个几乎所有微服务模块都有的实体类抽取出来,组成一个子项目(微服务模块),然后通过Maven的install命令以后,可以在其他的微服务模块中的POM文件中,使用<dependency></depenency>标签,依赖进来。

2、我的包含公用实体类的微服务模块的POM文件解析

下面是我的POM文件中包含的依赖:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud2023</artifactId>
        <groupId>com.lanse.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <packaging>jar</packaging>

    <artifactId>cloud-api-commons</artifactId>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
            <optional>true</optional>
        </dependency>

        <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
        <!--这个胡图工具包比较有用-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
        </dependency>
    </dependencies>
    <build>
        <!--fialName:打成war包后的名字 ${project.artifactId}:为pom.xml中对应的名字 这个项目为miao_sha4 -->
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <encoding>utf8</encoding>
            </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.4.2</version>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>

        </plugins>
    </build>


</project>

以上就是我们的POM文件中包含有的依赖。

首先是我们父项目的g  a  v,这是我们在IDEA窗口化创建微服务项目的时候,自己填写完以后,软件帮我们生成的。

接下来是packaging标签,里面填的是jar,指的是内部调用或者是作服务使用。这里我们就是用jar就可以啦。它的值,默认是jar,一般情况下,父项目的packaging都是pom。还可以填 war。它们的区别,我也还不是很清楚,就不做过多的讲解了,以免误导了大家。(不知道你们注意了没有,我们项目中External Libaraies下面,就算文件夹很多,但我们最后都落脚到了.jar文件下,在我们初学的时候,我们还都是会在eclipse中的lib下面,把需要的jar包粘贴进去,这是最根本的)

再往下就是我们的<dependencies></dependencies>

前两个是我们的热部署的依赖和LomBok插件的依赖。LomBok这个插件的版本,一定要选的合适,甚至我有同事遇到过,使用它的@Data方法以后,属性的getter和setter并没有帮我们创建出来。

再往下的依赖是胡图工具包的一个依赖。它是一个JAVA工具包,据说是功能很强大,我现在还没有怎么使用过,在这里就心血来潮的加上了。有兴趣各位可以到别处仔细了解一下。

再往下,是maven-compiler-pugin的依赖。这个依赖说是跟jdk的版本有关系。好像是我们需要使用到胡图工具包,因此需要使用这个依赖。具体的我也是看了一些博客才有点明白了,但还是明白的不是很透彻。具体可以看下面的这片博客:

https://www.cnblogs.com/juncaoit/p/9426792.html

再向下就是plugins标签,规定了maven-compiler-pugin的jdk的版本。

最后一个插件是 maven-surefire-plugin。这个插件是跟测试有关的。如果不加的话,它自己是有默认的配置的。我们有这样的一句配置:<skipTests>true</skipTests>,我们跳过了测试的步骤,这样在启动编译的时候,程序能够加载的快一点。具体的关于这个插件可以参考下面的这一片连接

https://www.cnblogs.com/qyf404/p/5013694.html

其实我对POM文件的解析非常的浅显,我们人理解的也还不是非常的到位。

3、我的目录结构

 以上是我的完成这个模块以后的目录结构。由于这个模块本来就是一个简单的公用实体类的模块,所有也不需要写application文件,也不需要main方法,因为它本身就不需要单独去跑。

在这里可以看到,当我们使用Maven的install命令以后,在target目录下方,就会出现一个jar包,我们以后的其它的服务模块中,就是直接引用的这个jar包

4、我的CommonResult实体类

一下是我的CommonResult实体类的代码:

package com.springcloud.entities;

public class CommonResult <T>{
    private Integer code;
    private String message;
    private T      data;

    public Integer getCode() {
        return code;
    }
    public String getMessage() {
        return message;
    }
    public T getData() {
        return data;
    }
    public CommonResult(Integer code,String message,T data){
        this.code=code;
        this.message=message;
        this.data=data;
    }
    public CommonResult(){}//这个是无参构造
    public CommonResult(Integer code,String message){
        //下面这个就直接是调用构造方法了
        this(code,message,null);
        //就不要像下面这样去使用了
//       this.code=code;
//       this.message=message;
    }
    public CommonResult<T> setCode(Integer code) {
        this.code = code;
        return this;
    }

    public CommonResult<T> setMessage(String message) {
        this.message = message;
        return this;
    }

    public CommonResult<T> setData(T data) {
        this.data = data;
        return this;
    }
}

我想先说一下这个类创建的目的:

现在的商业开发,都是前后端分离的形式,我们传给前端的就只是一个JSON串。无论查询或插入返回的结果是什么,我们都使用一个CommonResult对象把结果进行一下封装。这个类带有一个泛型,这个泛型就是我代码中的  data属性。当我们把这个CommonResult对象返回的时候,因为我们有  @RestController注解,程序会在后台把我们返回的CommonResult对象转变为一个JSON串,这样前后端交互就只是JSON串的形式,实现了前后端的分离。

这个类中的代码,就是三个属性。泛型data,信息描述message,状态码code。再有就是get和set方法。最后,为了我们后期创建CommonResult对象的方便,我们写了三个构造方法。

其实可以把我们的CommonResult类跟ArrayList类做一个对比,二者有相似之处,都是支持泛型的。ArrayList可以存储很多种对象额数组,我们的CommonResult中,也可以包含很多种对象来作为返回结果。

5、我的Payment类

Payment类,是真真正正的跟数据库中的一张表对应的一个类,下面是它的代码:

package com.springcloud.entities;

import java.io.Serializable;

public class Payment implements Serializable {
    private  Long id;
    private  String serial;

    public Long getId() {
        return id;
    }

    public Payment setId(Long id) {
        this.id = id;
        return this;
    }

    public String getSerial() {
        return serial;
    }

    public Payment setSerial(String serial) {
        this.serial = serial;
        return this;
    }
}

这个类中只有两个属性,并且我在创建数据库的时候,是把id这个属性设为自动增长了。

由于我全部的微服务的后端代码用的都是MyBatis的框架,因此这里我没有使用@TableName和@TableId注解,我们都使用的是每个微服务中的xml文件来对dao层接口的方法写对应的SQL语句,并且在这个xml文件中,我们有设置数据库的表和实体类之间的对应关系。

多说一句:由于MyBatis框架还是比较高级的,因此它会有一些默认的实体类和数据库表的对应设置,默认的就是按照顺序和属性名,字段名相同的原则。因此,在我们创建数据库表和实体类的时候,尽量保证数据表的字段名和实体类的属性名相同。

为什么要集成Serializable接口?:我查了很多篇的博客,可能是我本人的基础知识很薄弱,我对这些博客所讲解的内容都不是很理解。我目前所理解的就是,一个实体类如果继承了Serializable接口,那么它就可以更加方便的在硬盘和我们的程序之间进行存取操作,对我们的商业开发中的远程的调用也是很方便的。

6、我们写好了代码以后的操作

现在我们已经写好了我们代码

 只需要先点击图中的clean命令,然后点击install命令

当看到控制台全部都是INFO后,并且在target文件夹下有生成的jar包以后,那么我们就成功啦。

我的下一篇博客:

初学SpringCloud:将我的后端的业务逻辑模块注册到Eureka服务注册中心(描述后端业务逻辑模块的application和POM文件)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你是我的日月星河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值