SpringCloud笔记(四)-构建支付模块

前言

        本文中所说的支付模块,仅为依据当前 SpringCloud 视频教程中的简单的SpringCloud 子模块创建和RESTFUL风格API的大体结构示意,为视频教程中的demo,个人编写版,并非实际生产中包含有复杂真实的支付逻辑的支付模块。

一、创建数据库(db2019)及支付流水表(payment)

create dataBase db2019;    //创建数据库 db2019

//创建支付流水表 payment
create table payment (
	`id` BIGINT(20) not null auto_increment comment 'id',
	`serial` varchar(200) default '' comment '流水号',
	PRIMARY key(id)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

二、创建支付子模块(cloud-provider-payment8001)

        在SpringCloud笔记(三)-创建父工程__修铁路的的博客-CSDN博客 中创建的 SpringCloud 父工程下创建支付子模块 cloud-provider-payment8001

步骤:鼠标选中父工程 - 鼠标右键 - New - Module 

二、整理父项目 pom

主要是调整新增的 <modules></modules> 位置

三、完善子模块的pom.xml

引入相关的jar包

<?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>cloud2020</artifactId>
        <groupId>com.atguigu.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-provider-payment8001</artifactId>

    <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>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</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>

</project>

四、创建 application.yml 配置文件

1. 新建文件 application.yml

在新创建的子模块cloud-provider-payment8001 中的 resource 文件夹下,新建 application.yml

2. 完善 application.yml 中的相关配置信息

数据库信息根据实际情况修改

server:
  port: 8001

spring:
  application:
    name: cloud-payment-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.126.100:3306/db2019?useUnicode=true&characterEncoding=utf-8 #mysql地址 根据实际情况修改
    username: root  #mysql登录账号,根据实际情况修改
    password: abc123  #mysql登录密码,根据实际情况修改

mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.atguigu.springcloud.bean

 五、新建子模块启动类

在新增子模块的 java 目录下新增路径为 com.atguigu.springcloud 的启动类 PaymentMain8001

package com.atguigu.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @auther He
 * @date 2022-04-25 21:13
 */
@SpringBootApplication
public class PaymentMain8001 {

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

六、新增各业务层的测试代码

顺序由 bean -> mapper -> service -> serviceImpl -> controller

1. 新增JavaBean 相关

1.1 新增支付流水实体 Payment.java

package com.atguigu.springcloud.bean;

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

import java.io.Serializable;

/**
 * 支付流水类
 * @auther He
 * @date 2022-04-25 22:06
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment implements Serializable {
    /**
     * id
     */
    private Long id;
    /**
     * 流水号
     */
    private String serial;
}

1.2 新增请求返回对象实体类 CommonResult.java

package com.atguigu.springcloud.bean;

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

/**
 * 返回对象
 * @auther He
 * @date 2022-04-25 22:10
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult<T> {

    /**
     * 请求响应码
     */
    private Integer code;
    /**
     * 请求响应信息
     */
    private String message;
    /**
     * 响应数据
     */
    private T data;

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

2. 新增 Mapper 层相关代码

2.1 新增 PaymentMapper.java

package com.atguigu.springcloud.mapper;

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

/**
 * @auther He
 * @date 2022-04-25 22:16
 */
@Mapper
public interface PaymentMapper {

    /**
     * 新增付款流水
     * @param payment
     * @return
     */
    public int createInfo(Payment payment);

    /**
     * 根据id查询付款流水详情
     * @param id
     * @return
     */
    public Payment getPaymentById(@Param("id") Long id);
}

2.2 新增 PaymentMapper.xml 文件

在子模块的 resource下,新建 mapper 文件夹,在mapper 文件夹中新增 PaymentMapper.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 namespace="com.atguigu.springcloud.mapper.PaymentMapper">

    <resultMap id="BaseResultMap" type="com.atguigu.springcloud.bean.Payment">
        <id column="id" property="id"></id>
        <result column="serial" property="serial"></result>
    </resultMap>

    <insert id="createInfo" parameterType="com.atguigu.springcloud.bean.Payment" useGeneratedKeys="true" keyProperty="id">
        insert into payment (serial) values (#{serial})
    </insert>

    <select id="getPaymentById" parameterType="java.lang.Long" resultMap="BaseResultMap">
        select t.* from payment t where t.id = #{id}
    </select>
</mapper>

3. 新增 service 接口代码

新增 service 接口类 com.atguigu.springcloud.service.IPaymentService.java

package com.atguigu.springcloud.service;

import com.atguigu.springcloud.bean.Payment;
import org.apache.ibatis.annotations.Param;

/**
 * @auther He
 * @date 2022-04-25 22:30
 */
public interface IPaymentService {

    /**
     * 新增付款流水
     * @param payment
     * @return
     */
    public boolean createInfo(Payment payment);

    /**
     * 根据id查询付款流水详情
     * @param id
     * @return
     */
    public Payment getPaymentById(@Param("id") Long id);
}

4. 新增IPaymentService.java 接口实现类 PaymentServiceImpl.java

package com.atguigu.springcloud.service.impl;

import com.atguigu.springcloud.mapper.PaymentMapper;
import com.atguigu.springcloud.bean.Payment;
import com.atguigu.springcloud.service.IPaymentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @auther He
 * @date 2022-04-25 22:31
 */
@Service
@Slf4j
public class PaymentServiceImpl implements IPaymentService {

    @Resource
    private PaymentMapper paymentMapper;

    /**
     * 新增付款流水
     *
     * @param payment
     * @return
     */
    @Override
    public boolean createInfo(Payment payment) {
        int result = paymentMapper.createInfo(payment);
        log.debug(">>> 新增结果:{}", result);
        if (result > 0) {
            return true;
        }
        return false;
    }

    /**
     * 根据id查询付款流水详情
     *
     * @param id
     * @return
     */
    @Override
    public Payment getPaymentById(Long id) {
        return paymentMapper.getPaymentById(id);
    }
}

5. 新增 controller 层

新建 PaymentController.java

package com.atguigu.springcloud.controller;

import com.atguigu.springcloud.bean.CommonResult;
import com.atguigu.springcloud.bean.Payment;
import com.atguigu.springcloud.service.IPaymentService;
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;

import javax.annotation.Resource;

/**
 * @auther He
 * @date 2022-04-25 22:36
 */
@RestController
public class PaymentController {

    @Resource
    private IPaymentService iPaymentService;

    /**
     * 新增支付流水
     * @param payment
     * @return
     */
    @PostMapping("/payment/create")
    public CommonResult createInfo(Payment payment) {
        return new CommonResult(200, "新增成功", iPaymentService.createInfo(payment));
    }

    /**
     * 根据id查询支付流水详情
     * @param id
     * @return
     */
    @GetMapping("/payment/get/{id}")
    public CommonResult getInfoById(@PathVariable("id") Long id) {
        return new CommonResult(200, "查询成功", iPaymentService.getPaymentById(id));
    }
}

至此,相关模块的demo代码已新增完毕,直接启动 子模块

子模块在端口 8001 启动成功 

七、测试相关代码逻辑是否正确

使用工具 Postman

7.1 测试新增接口,使用Post请求

7.1.1 检验是否新增成功

查询数据库中的 payment 表数据

 7.2 测试根据id查询详情接口,使用Get请求 

和 7.1.1 中查询的数据完全一致,表明查询接口正常

结语

        以上为 SpringCloud 视频教程中的 支付模块的创建,通过当前子模块的创建,建立起对微服务子模块及单个子模块内请求处理流程的初步概念,构建出对RESETFUL API 的初步认识。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值