SpringCloud实战---第三篇:Rest风格微服务工程构建
【摘要】 前言 说起来容易做起来难,一步一步都干完!!! 学习一定要自己动手搞一搞,不能只眼会。学习笔记是跟着尚硅谷的视频学的: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配置文件
- 创建出配置文件
resources上右键,新建File,命名为application.yml
- 编写配置
在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.编写本服务的启动入口
- 新建入口类
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. 测试一下
- 在数据库添加一条数据
- 启动工程
- 打开浏览器,访问
http://localhost:8001/payment/get/1
!!!注意:由于我们使用的Result风格,测试添加数据时只能使用Post请求,而浏览器默认的是get请求,所以如果要测试添加数据我们要使用PostMan工具来测试,可自行百度安装。
基础业务测试完成。
最后,为了方便,配置一下热部署
热部署就是项目启动状态下,修改后端代码后他会自动重启生效。
!!!注意:我依赖都已经添加好(不用再修改文件),只需按博客里面的后几步修改下IDEA配置即可
参见博客:https://blog.csdn.net/weixin_43464964/article/details/100538585
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)