??前言
本篇博文是關于Spring Cloud–從零開始搭建微服務基礎環(huán)境【二】,希望你能夠喜歡
??個人主頁:晨犀主頁
??個人簡介:大家好,我是晨犀,希望我的文章可以幫助到大家,您的滿意是我的動力????
??歡迎大家:這里是CSDN,我總結(jié)知識的地方,歡迎來到我的博客,感謝大家的觀看??
如果文章有什么需要改進的地方還請大佬不吝賜教 先在此感謝啦??
微服務基礎環(huán)境搭建【二】
創(chuàng)建會員中心微服務模塊-service provider
需求說明/圖解
1、通過瀏覽器可以獲取會員信息(通過會員中心微服務模塊)
- 使用Postman 測試查詢
思路分析/圖解
1、創(chuàng)建Moduel 并完成配置
2、創(chuàng)建數(shù)據(jù)庫/表
3、創(chuàng)建entity-dao/Mapper.xml-service-controller
4、完成測試
實現(xiàn)步驟
創(chuàng)建Moduel & 完成配置
創(chuàng)建member-service-provider-10000 微服務模塊[提供會員服務]
- 具體操作步驟
父工程的pom.xml-會做相應變化,管理member-service-provider-10000 微服務子模塊
修改member-service-provider-10000 的pom.xml , 加入相關依賴
- 修改pom.xml
<?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>e-commerce-center</artifactId>
<groupId>com.nlc.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>member-service-provider-10000</artifactId>
<!--引入相關的依賴: 我們引入了當前需要的依賴,后面如果有其它需要,再靈活調(diào)整-->
<dependencies>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<!-- 這里我們重新指定一下version -->
<version>1.1.13</version>
</dependency>
<!--引入web-starter 說明我們使用版本仲裁(從父項目繼承了版本)
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--說明:starter-actuator 是springboot程序的監(jiān)控系統(tǒng), 可以實現(xiàn)系統(tǒng)的健康檢測
可以通過http://localhost:80/actuator 看到相關的連接,和信息
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--引入spring-boot-starter-test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
- 刷新maven , 注意看引入的jar 的版本.
創(chuàng)建resources/application.yml
server:
port: 10000
spring:
application:
name: member-service-provider #配置應用的名稱
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/e_commerce_center_db?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: 123456
#配置mybatis
mybatis:
mapper-locations: classpath:mapper/*.xml #指定mapper.xml文件位置
type-aliases-package: com.my.springcloud.entity # 實例類所在的包,這樣通過類名就可以引用
創(chuàng)建主啟動類MemberApplication
@SpringBootApplication
public class MemberApplication10000 {
public static void main(String[] args) {
SpringApplication.run(MemberApplication10000.class, args);
}
}
創(chuàng)建數(shù)據(jù)庫/表
CREATE DATABASE e_commerce_center_db
USE e_commerce_center_db
CREATE TABLE member
(
id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'id',
NAME VARCHAR(64) COMMENT '用戶名',
pwd CHAR(32) COMMENT '密碼',
mobile VARCHAR(20) COMMENT '手機號碼',
email VARCHAR(64) COMMENT '郵箱',
gender TINYINT COMMENT '性別',
PRIMARY KEY (id)
);
INSERT INTO member VALUES
(NULL, 'smith', MD5('123'), '123456789000', 'smith@sohu.com', 1);
SELECT * FROM member
業(yè)務實現(xiàn)
創(chuàng)建entity
@AllArgsConstructor
@NoArgsConstructor
@Data
//Serializable 加上,后面可能使用
public class Member implements Serializable {
private Long id;
private String name;
private String pwd;
private String mobile;
private String email;
private Integer gender;
}
創(chuàng)建com/my/springcloud/entity/Result.java
/**
* 1. 用于返回結(jié)果, 利于json 格式
* 2. 這個工具類, 在網(wǎng)上也可找到
*/
public class Result<T> {
private String code;
private String msg;
private T data;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public Result() {
}
public Result(T data) {
this.data = data;
}
public static Result success() {
Result result = new Result<>();
result.setCode("200");
result.setMsg("success");
return result;
}
public static <T> Result<T> success(T data) {
Result<T> result = new Result<>(data);
result.setCode("200");
result.setMsg("success");
return result;
}
public static <T> Result<T> success(String msg, T data) {
Result<T> result = new Result<>(data);
result.setCode("200");
result.setMsg(msg);
return result;
}
public static Result error(String code, String msg) {
Result result = new Result();
result.setCode(code);
result.setMsg(msg);
return result;
}
public static <T> Result<T> error(String code, String msg, T data) {
Result<T> result = new Result<>(data);
result.setCode(code);
result.setMsg(msg);
return result;
}
}
創(chuàng)建Dao
創(chuàng)建接口:com/my/springcloud/dao/MemberDao.java
@Mapper
public interface MemberDao {
//crud 接口...
Member queryMemberById(Long id);
int save(Member member);
}
創(chuàng)建resources/mapper/MemberMapper.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.my.springcloud.dao.MemberDao">
<!--配置實現(xiàn)queryMemberById
1. 這里可以使用 resultType="Member"
2. 當然也可以使用resultMap="自定義的resultMap", 這里我們使用resultMap
3. 如何配置一個resultMap ,在mybatis講過的,請回顧
-->
<resultMap id="BaseResultMap" type="Member">
<id column="id" property="id" jdbcType="BIGINT"></id>
<id column="name" property="name" jdbcType="VARCHAR"></id>
<id column="pwd" property="pwd" jdbcType="VARCHAR"></id>
<id column="mobile" property="mobile" jdbcType="VARCHAR"></id>
<id column="email" property="email" jdbcType="VARCHAR"></id>
<id column="gender" property="gender" jdbcType="TINYINT"></id>
</resultMap>
<select id="queryMemberById" parameterType="Long" resultMap="BaseResultMap">
SELECT * FROM `member` WHERE `id`=#{id}
</select>
<!--配置實現(xiàn)save -->
<insert id="save" parameterType="Member" useGeneratedKeys="true" keyProperty="id">
INSERT INTO `member`(`NAME`,`pwd`,`mobile`,`email`,`gender`)
VALUES(#{name}, MD5(#{pwd}), #{mobile}, #{email}, #{gender});
</insert>
</mapper>
完成測試
創(chuàng)建Service
創(chuàng)建接口:com/my/springcloud/service/MemberService.java
public interface MemberService {
Member queryMemberById(Long id);
int save(Member member);
}
創(chuàng)建com/my/springcloud/service/impl/MemberServiceImpl.java
@Service
public class MemberServiceImpl implements MemberService {
//裝配MemberDao
@Resource
private MemberDao memberDao;
@Override
public Member queryMemberById(Long id) {
return memberDao.queryMemberById(id);
}
@Override
public int save(Member member) {
return memberDao.save(member);
}
}
完成測試
創(chuàng)建 Controller
創(chuàng)建:com/my/springcloud/controller/MemberController.java
@RestController
@Slf4j
public class MemberController {
//裝配MemberService
@Resource
private MemberService memberService;
//添加方法/接口
//這里請小伙伴回顧, 應該如何提交
//說明
//1. 我們的前端如果是以json格式來發(fā)送添加信息Member, 那么我們需要使用@RequestBody
// , 才能將數(shù)據(jù)封裝到對應的bean, 同時保證http的請求頭的 content-type是對應
//2. 如果前端是以表單形式提交了,則不需要使用@RequestBody, 才會進行對象參數(shù)封裝, 同時保證
// http的請求頭的 content-type是對應
@PostMapping("/member/save")
public Result save(@RequestBody Member member) {
log.info("service-provider member={}", member);
int affected = memberService.save(member);
if (affected > 0) { //說明添加成功
return Result.success("添加會員成功", affected);
} else {
return Result.error("401", "添加會員失敗");
}
}
//查詢的方法/接口
//這里使用url占位符+@PathVariable
@GetMapping("/member/get/{id}")
public Result getMemberById(@PathVariable("id") Long id, HttpServletRequest request) {
//String color = request.getParameter("color");
//String address = request.getParameter("address");
//模擬超時, 休眠5s
//try {
// TimeUnit.MILLISECONDS.sleep(5000);
//} catch (InterruptedException e) {
// e.printStackTrace();
//}
Member member = memberService.queryMemberById(id);
//使用Result把查詢到的結(jié)果返回
if (member != null) {
//return Result.success("查詢會員成功 member-service-provider-10000 " + color + "-" + address, member);
return Result.success("查詢會員成功 member-service-provider-10000", member);
} else {
return Result.error("402", "ID= " + id + "不存在");
}
}
}
完成測試
瀏覽器
瀏覽器輸入: http://localhost:10000/member/get/1
PostMan:
- 測試查詢
- 測試添加
注意事項和細節(jié)
1、我們的前端如果是以json 格式來發(fā)送添加信息furn,那么我們需要使用@RequestBody,才能將數(shù)據(jù)封裝到對應的bean, 同時保證http 的請求頭的content-type 是對應。
2、如果前端是以表單形式提交了/或者是以parameters,則不需要使用@RequestBody, 才會進行對象參數(shù)封裝, 同時保證http 的請求頭的content-type 是對應。
3、在進行SpringBoot 應用程序測試時,引入的JUnit 是org.junit.jupiter.api.Test。
4、在運行程序時,一定要確保你的XxxxMapper.xml 文件被自動放到的target 目錄的classes 指定目錄。
文章來源:http://www.zghlxwxcb.cn/news/detail-692206.html
文章到這里就結(jié)束了,如果有什么疑問的地方請指出,諸大佬們一起來評論區(qū)一起討論??
希望能和諸大佬們一起努力,今后我們一起觀看感謝您的閱讀??
如果幫助到您不妨3連支持一下,創(chuàng)造不易您們的支持是我的動力??文章來源地址http://www.zghlxwxcb.cn/news/detail-692206.html
到了這里,關于Spring Cloud--從零開始搭建微服務基礎環(huán)境【二】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!