《sca-trade :简易交易系统》系列文章
《sca-trade :简易交易系统》开篇
《sca-trade :简易交易系统》微服务项目搭建,完成基础模块开发
《sca-trade :简易交易系统》代码实现
文章目录
整个项目分为三个模块业务模块 + 两个通用模块,初步规划的项目结构为:
- sca-trade
- trade-utils 依赖统一管理,版本
- trade-bean 实体类管理
- trade-user 客户微服务
- trade-product 商品微服务
- trade-order 订单微服务
模块交互流程
开始搭建项目
搭建基于 maven 的多模块工程:sca-trade
创建 maven 多模块项目父工程
项目搭建我采用的 是 IDEA 社区版,具体的安装过程就不展示了,大家不懂的,可以直接去搜索下哈
项目搭建过程,这里也不赘述了,我们直接快速开始 ~~
项目结构图
引入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
</parent>
<groupId>io.shijiev.trade</groupId>
<artifactId>sca-trade</artifactId>
<version>${revision}</version>
<name>${project.artifactId}</name>
<modules>
<module>trade-utils</module>
<module>trade-user</module>
<module>trade-order</module>
<module>trade-product</module>
<module>trade-gateway</module>
<module>trade-bean</module>
</modules>
<packaging>pom</packaging>
<url>https://github.com/shijiev/sca-trade.git</url>
<description>基于 Spring-Cloud-Alibaba 的 简易交易系统</description>
<properties>
<revision>1.0</revision>
<java.version>11</java.version>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<logback.version>1.1.7</logback.version>
<slf4j.version>1.7.21</slf4j.version>
<common.logging>1.2</common.logging>
<fastjson.version>1.2.51</fastjson.version>
<mybatis.version>3.4.6</mybatis.version>
<mybatis.spring.version>2.0.1</mybatis.spring.version>
<mysql.jdbc.version>8.0.19</mysql.jdbc.version>
<druid.version>1.1.10</druid.version>
<lombok.version>1.18.8</lombok.version>
<junit.version>4.12</junit.version>
</properties>
创建工具类模块 trade-utils
(略)
模块结构图
引入依赖
<?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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.shijiev.trade</groupId>
<artifactId>sca-trade</artifactId>
<version>${revision}</version>
</parent>
<artifactId>trade-utils</artifactId>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.spring.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.jdbc.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>${common.logging}</version>
</dependency>
<!-- log -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
</dependencies>
</project>
核心类开发
(略)
创建实体类模块 trade-bean
(略)
模块结构图
引入依赖
<?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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.shijiev.trade</groupId>
<artifactId>sca-trade</artifactId>
<version>1.0</version>
</parent>
<artifactId>trade-bean</artifactId>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>io.shijiev.trade</groupId>
<artifactId>trade-utils</artifactId>
<version>${revision}</version>
</dependency>
</dependencies>
</project>
表结构设计
订单信息至少要包含:客户名称,客户电话,客户地址,商品名称,商品价格,商品数量
客户信息表
CREATE TABLE `trade_user` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '用户名称',
`password` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '密码',
`phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '联系电话',
`address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '联系地址',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='用户信息表';
商品信息表
CREATE TABLE `trade_product` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '产品ID',
`product_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '产品名称',
`product_price` decimal(10,2) DEFAULT NULL COMMENT '产品价格',
`product_stock` int unsigned DEFAULT NULL COMMENT '产品库存',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='产品信息表';
订单信息表
CREATE TABLE `trade_order` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '订单ID',
`user_id` bigint DEFAULT NULL COMMENT '用户ID',
`user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '用户名称',
`phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '联系电话',
`address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '联系地址',
`total_price` decimal(10,2) DEFAULT NULL COMMENT '总价格',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='订单信息表';
订单明细表
CREATE TABLE `trade_order_item` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '订单条目ID',
`order_id` bigint DEFAULT NULL COMMENT '订单ID',
`product_id` bigint DEFAULT NULL COMMENT '产品ID',
`product_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '产品名称',
`product_price` decimal(10,2) DEFAULT NULL COMMENT '产品价格',
`number` int unsigned DEFAULT NULL COMMENT '产品数量',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='订单明细表';
核心类开发
根据上面的 SQL 创建实体类,这里为了方便,统一使用 lombok 注解
## 客户信息
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {
private static final long serialVersionUID = 5230161321933549023L;
/**
* ID
* */
private Long id;
/**
* 用户名称
* */
private String userName;
/**
* 用户密码
* */
private String password;
/**
* 电话
* */
private String phone;
/**
* 地址
* */
private String address;
}
## 商品信息
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product implements Serializable {
private static final long serialVersionUID = -2129655224162836596L;
/**
* ID
* */
private Long id;
/**
* 产品名称
* */
private String productName;
/**
* 产品价格
* */
private BigDecimal productPrice;
/**
* 产品库存
* */
private Integer productStock;
}
## 订单信息
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Order implements Serializable {
private static final long serialVersionUID = 6648507651970680262L;
/**
* ID
* */
private Long id;
/**
* 用户ID
* */
private Long userId;
/**
* 用户名称
* */
private String userName;
/**
* 电话
* */
private String phone;
/**
* 地址
* */
private String address;
/**
* 产品总价
* */
private BigDecimal totalPrice;
}
## 订单明细
@Data
@NoArgsConstructor
@AllArgsConstructor
public class OrderItem implements Serializable {
private static final long serialVersionUID = -3277986286187066141L;
/**
* ID
* */
private Long id;
/**
* 订单ID
* */
private Long orderId;
/**
* 产品ID
* */
private Long productId;
/**
* 产品名称
* */
private String productName;
/**
* 产品单价
* */
private BigDecimal productPrice;
/**
* 数量
* */
private Integer number;
}
创建用户模块 trade-user
模块结构图
引入依赖
<?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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.shijiev.trade</groupId>
<artifactId>sca-trade</artifactId>
<version>${revision}</version>
</parent>
<artifactId>trade-user</artifactId>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>io.shijiev.trade</groupId>
<artifactId>trade-bean</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
核心类开发
创建商品模块 trade-product
模块结构图
引入依赖
<?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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.shijiev.trade</groupId>
<artifactId>sca-trade</artifactId>
<version>${revision}</version>
</parent>
<artifactId>trade-product</artifactId>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>io.shijiev.trade</groupId>
<artifactId>trade-bean</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
核心类开发
创建订单模块 trade-order
模块结构图
引入依赖
<?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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.shijiev.trade</groupId>
<artifactId>sca-trade</artifactId>
<version>${revision}</version>
</parent>
<artifactId>trade-order</artifactId>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>io.shijiev.trade</groupId>
<artifactId>trade-bean</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>