SpringCloud实战---第三篇:Rest风格微服务工程构建

举报
老司机张师傅 发表于 2022/07/26 23:19:47 2022/07/26
【摘要】 前言 说起来容易做起来难,一步一步都干完!!! 学习一定要自己动手搞一搞,不能只眼会。学习笔记是跟着尚硅谷的视频学的:https://www.bilibili.com/video/BV18E411x7eT?p=1 场景大纲 我们以这样一个场景来学习、构建我们的微服务当然,我们主要目的不是为了学习业务,是为了学习微服务技术栈,明确好主次哈~ 正儿八经的开搞 构建服务提供者(支付模块)基础环境...

前言

说起来容易做起来难,一步一步都干完!!!

学习一定要自己动手搞一搞,不能只眼会。

学习笔记是跟着尚硅谷的视频学的:https://www.bilibili.com/video/BV18E411x7eT?p=1

场景大纲

我们以这样一个场景来学习、构建我们的微服务

当然,我们主要目的不是为了学习业务,是为了学习微服务技术栈,明确好主次哈~
在这里插入图片描述

正儿八经的开搞

构建服务提供者(支付模块)基础环境

1.建立模块

在这里插入图片描述
在这里插入图片描述

2.输入子模块名

微服务子模块名通常以端口号结尾,因为部署时我们以端口号访问

cloud-provider-payment8001

在这里插入图片描述
在这里插入图片描述
创建成功后,父工程的pom文件会多一个子模块
在这里插入图片描述

3.修改子模块POM,添加依赖

将以下内容粘贴到</project>标签上面

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!--mysql-connector-java-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--jdbc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <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>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

4.编写application.yml配置文件

  1. 创建出配置文件
    resources上右键,新建File,命名为application.yml
    在这里插入图片描述
  2. 编写配置
    在application.yml中写入配置信息(都懂,不多说粘贴就好):
server:
  port: 8001  # 本微服务端口号 8001

spring:
  application:
    name: cloud-payment-service # 本服务的名称
  # 数据源
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
#    数据库配置
    url: jdbc:mysql://127.0.0.1:3306/gz?useUnicode=true&&characterEncoding=utf-8&useSSL=false&autoReconnect=true
    username: root
    password: root

# mybatis的mapper文件路径
mybatis:
  mapperLocations: classpath:mapper/*.xml
  type-aliases-package: com.atguigu.springcloud.entities    # 所有Entity别名类所在包

5.编写本服务的启动入口

  1. 新建入口类
com.atguigu.springcloud.PaymentMain8001

在这里插入图片描述
2. 给启动类添加注解标时为SpringBoot启动入口

@SpringBootApplication

在这里插入图片描述
3. 添加main方法

public static void main(String[] args) {
    SpringApplication.run(PaymentMain8001.class,args);
}

在这里插入图片描述

编写服务业务

以下步骤就是创建一个简单的三层框架,老司机可以自己创建,照顾下基础薄弱的同学,后续的学习可以直接copy该模块改吧改吧创建其他微服务。

不会CV的程序员能叫好程序员??

在这里插入图片描述

1.创建数据库表

这里我们主要学习微服务框架,表建的简单一点就可以

CREATE TABLE `payment` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `serial` varchar(200) DEFAULT '' COMMENT '流水号',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.创建实体类

建entities包,创建Payment实体类(映射数据库)

package com.atguigu.springcloud.entities;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * @Author: Daisen.Z
 * @Date: 2021/12/16 16:10
 * @Version: 1.0
 * @Description:
 */
// 这三个注解意思是自动添加get,set方法,全参构造和空参构造
// 使用这三个注解需要安装LomBok插件,自行百度
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment implements Serializable {

    private Long id;

    private String serial;

}

在这里插入图片描述

3.创建CommonResult类,该类表示前后端交互统一JOSN格式

package com.atguigu.springcloud.entities;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Author: Daisen.Z
 * @Date: 2021/12/16 16:15
 * @Version: 1.0
 * @Description:
 */
// 这三个注解意思是自动添加get,set方法,全参构造和空参构造
// 使用这三个注解需要安装LomBok插件,自行百度
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult<T> {

    private Integer code;

    private String msg;

    private T data;

    public CommonResult(Integer code, String msg) {
        this(code,msg,null);
    }
}

在这里插入图片描述

4. 建dao层(不多说了,直接粘贴吧,不是主要学这的,分清主次)

package com.atguigu.springcloud.dao;

import com.atguigu.springcloud.entities.Payment;
import org.apache.ibatis.annotations.Mapper;

/**
 * @Author: Daisen.Z
 * @Date: 2021/12/16 16:19
 * @Version: 1.0
 * @Description:
 */
@Mapper
public interface PaymentDao {

    public int create(Payment payment);


    public Payment getPaymentById(Long id);
}

在这里插入图片描述

5. 建mapper和xml

创建成功后,点击PaymentDao会能跳转到刚才写的dao

<?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 namespace="com.atguigu.springcloud.dao.PaymentDao">

    <insert id="create" parameterType="Payment" useGeneratedKeys="true" keyProperty="id">
        insert into payment(serial)  values(#{serial});
    </insert>


    <resultMap id="BaseResultMap" type="com.atguigu.springcloud.entities.Payment">
        <id column="id" property="id" jdbcType="BIGINT"/>
        <id column="serial" property="serial" jdbcType="VARCHAR"/>
    </resultMap>
    <select id="getPaymentById" parameterType="Long" resultMap="BaseResultMap">
        select * from payment where id=#{id};
    </select>

</mapper>

在这里插入图片描述

6. 建Service层

interface

package com.atguigu.springcloud.service;

import com.atguigu.springcloud.entities.Payment;

/**
 * @Author: Daisen.Z
 * @Date: 2021/12/16 16:26
 * @Version: 1.0
 * @Description:
 */
public interface PaymentService {

    public int create(Payment payment);


    public Payment getPaymentById(Long id);
}

impl

package com.atguigu.springcloud.service.impl;

import com.atguigu.springcloud.dao.PaymentDao;
import com.atguigu.springcloud.entities.Payment;
import com.atguigu.springcloud.service.PaymentService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @Author: Daisen.Z
 * @Date: 2021/12/16 16:26
 * @Version: 1.0
 * @Description:
 */
@Service
public class PaymentServiceImpl implements PaymentService {

    @Resource
    private PaymentDao paymentDao;

    @Override
    public int create(Payment payment) {
        return paymentDao.create(payment);
    }

    @Override
    public Payment getPaymentById(Long id) {
        return paymentDao.getPaymentById(id);
    }
}

在这里插入图片描述

7.建Controller层

package com.atguigu.springcloud.controller;

import com.atguigu.springcloud.entities.CommonResult;
import com.atguigu.springcloud.entities.Payment;
import com.atguigu.springcloud.service.PaymentService;
import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author: Daisen.Z
 * @Date: 2021/12/16 16:31
 * @Version: 1.0
 * @Description:
 */
@RestController
@Slf4j
public class PaymentController {
    @Autowired
    private PaymentService paymentService;

    @PostMapping("/payment/create")
    public CommonResult create(Payment payment){
        int result = paymentService.create(payment);
        log.info("***********插入结果:"+result);
        if (result > 0){
            return new CommonResult(200,"成功",result);
        }else {
            return new CommonResult(444,"失败",result);
        }
    }

    @GetMapping("/payment/get/{id}")
    public CommonResult getPaymentById(@PathVariable("id") Long id){
        Payment payment = paymentService.getPaymentById(id);
        log.info("***********查询结果:"+payment);
        if (payment != null){
            return new CommonResult(200,"查询成功",payment);
        }else {
            return new CommonResult(444,"查询失败",payment);
        }
    }
}

在这里插入图片描述

8. 测试一下

  1. 在数据库添加一条数据
    在这里插入图片描述
  2. 启动工程
    在这里插入图片描述
  3. 打开浏览器,访问
http://localhost:8001/payment/get/1

在这里插入图片描述

!!!注意:由于我们使用的Result风格,测试添加数据时只能使用Post请求,而浏览器默认的是get请求,所以如果要测试添加数据我们要使用PostMan工具来测试,可自行百度安装。

基础业务测试完成。

最后,为了方便,配置一下热部署

热部署就是项目启动状态下,修改后端代码后他会自动重启生效。

!!!注意:我依赖都已经添加好(不用再修改文件),只需按博客里面的后几步修改下IDEA配置即可

参见博客:https://blog.csdn.net/weixin_43464964/article/details/100538585

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。