前言
本文中所说的支付模块,仅为依据当前 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 的初步认识。