wordpress外贸建站 视频,做国外百科知识网站,怎么做淘宝网站的网页设计,小程序制作一个需要多少钱目录
一、案例搭建
1.数据库表
2.服务模块
二、具体代码实现如下#xff1a; (1) 首先是大体框架为#xff1a; #xff08;2#xff09;父模块中的pom文件配置 #xff08;3#xff09;shop_common模块#xff0c;这个模块里面只需要配置pom.xml#xff0c;与实体…目录
一、案例搭建
1.数据库表
2.服务模块
二、具体代码实现如下 (1) 首先是大体框架为 2父模块中的pom文件配置 3shop_common模块这个模块里面只需要配置pom.xml与实体类 (4)在shop_product、shop_order、shop_user子模块中导入公共子模块common的坐标 (4.1)shop_product的pom.xml (4.2)shop_order的pom.xml (4.3)shop_user的pom.xml
三、服务调⽤
1.RestTemplate介绍
2.RestTemplate⽅法介绍
3.通过RestTemplate调⽤微服务
(1)shop_order的控制层
(2)shop_order的 service层
(3)shop_order的 OrderMappper数据访问层代码
(4)shop_order的 测试类主入口代码
(5)shop_order的 测试类主入口代码 一、案例搭建 使⽤微服务架构的分布式系统,微服务之间通过⽹络通信。我们通过服务提供者与服务消费者来描述微服 务间的调⽤关系。 服务提供者服务的被调⽤⽅提供调⽤接⼝的⼀⽅ 服务消费者服务的调⽤⽅依赖于其他服务的⼀⽅ 我们以电商系统中常⻅的⽤户下单为例⽤户向订单微服务发起⼀个购买的请求。在进⾏保存订单之前 需要调⽤商品微服务查询当前商品库存单价等信息。在这种场景下订单微服务就是⼀个服务消费 者商品微服务就是⼀个服务提供者。 1.数据库表
shop_order订单表
shop_product商品表
shop_user⽤户表
2.服务模块
创建公共⽗模块springcloud_alibaba
创建公共模块 shop_common ,⽤于存放公共的实体类和⼯具类
创建订单微服务模块 shop_order 端⼝809X
创建商品微服务模块 shop_product 端⼝808X
创建⽤户微服务模块 shop_user 端⼝807X 二、具体代码实现如下 (1) 首先是大体框架为 其中common用于存在实体类对象order用于创建订单product用于操作产品信息user用于操作用户信息。 2父模块中的pom文件配置 !-- 项目基本信息 --groupIdcom.zad/groupIdartifactIdspringcloud_alibaba/artifactIdversion1.0-SNAPSHOT/version 这里定义了项目的基本信息包括groupId组织标识符、artifactId项目标识符、和version版本号。这些信息唯一标识了该Maven项目。 !-- pom:父文件 --packagingpom/packaging 这个项目打包类型为pom意味着它是一个聚合项目或父项目用来管理多个子模块。 !-- 父项目的子模块 --modulesmoduleshop_order/modulemoduleshop_product/modulemoduleshop_user/modulemoduleshop_commen/module/modules 定义了该父项目的四个子模块。 !-- 依赖版本的锁定 --propertiesjava.version1.8/java.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingspring-cloud.versionGreenwich.RELEASE/spring-cloud.versionspring-cloud-alibaba.version2.1.1.RELEASE/spring-cloud-alibaba.version/properties 这里定义了一些属性如Java版本、编码格式以及Spring Cloud和Spring Cloud Alibaba的版本。这些属性可以在整个POM文件中复用方便管理和升级。 !--dependencyManagement所包含的坐标子项目不会直接继承需要声明才可继承-- dependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion${spring-cloud-alibaba.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagement 在dependencyManagement部分定义了依赖管理。这里指定了Spring Cloud和Spring Cloud Alibaba的依赖项及其版本。这些依赖项不会自动应用到子项目中子项目需要显式声明才能继承。 3shop_common模块这个模块里面只需要配置pom.xml与实体类
pom.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdspringcloud_alibaba/artifactIdgroupIdcom.zad/groupIdversion1.0-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdshop_commen/artifactId!-- 依赖 --dependenciesdependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.4.3/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.12/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.56/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.16/version/dependencydependencygroupIdcom.zad/groupIdartifactIdspringcloud_alibaba/artifactIdversion1.0-SNAPSHOT/version/dependency/dependencies/project 在domain包下创建了三个实体类用于创建存储订单、产品、用户这里只展示订单的代码其余代码均相同逻辑
TableName(shop_order)
Data
public class Order {TableId(value oid,type IdType.AUTO)private Long oid;//订单id//用户TableField(uid)private Integer uid;//用户idTableField(username)private String username;//用户名//商品TableField(pid)private Integer pid;//商品idTableField(pname)private String pname;//商品名称TableField(pprice)private Double pprice;//商品单价//数量TableField(number)private Integer number;//购买数量
}通过TableName映射shop_order数据库其余的都是成员变量的创建和映射。 (4)在shop_product、shop_order、shop_user子模块中导入公共子模块common的坐标 !-- shop-common --dependencygroupIdcom.zad/groupIdartifactIdshop_commen/artifactIdversion1.0-SNAPSHOT/version/dependency (4.1)shop_product的pom.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdspringcloud_alibaba/artifactIdgroupIdcom.zad/groupIdversion1.0-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdshop_product/artifactIddependencies!-- springboot-web --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- shop-common --dependencygroupIdcom.zad/groupIdartifactIdshop_commen/artifactIdversion1.0-SNAPSHOT/version/dependencydependencygroupIdcom.zad/groupIdartifactIdspringcloud_alibaba/artifactIdversion1.0-SNAPSHOT/version/dependency/dependencies/project (4.2)shop_order的pom.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdspringcloud_alibaba/artifactIdgroupIdcom.zad/groupIdversion1.0-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdshop_order/artifactIddependencies!-- springboot-web --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- shop-common --dependencygroupIdcom.zad/groupIdartifactIdshop_commen/artifactIdversion1.0-SNAPSHOT/version/dependencydependencygroupIdcom.zad/groupIdartifactIdspringcloud_alibaba/artifactIdversion1.0-SNAPSHOT/version/dependency/dependencies
/project (4.3)shop_user的pom.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdspringcloud_alibaba/artifactIdgroupIdcom.zad/groupIdversion1.0-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdshop_user/artifactIddependencies!-- springboot-web --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- shop-common --dependencygroupIdcom.zad/groupIdartifactIdshop_commen/artifactIdversion1.0-SNAPSHOT/version/dependencydependencygroupIdcom.zad/groupIdartifactIdspringcloud_alibaba/artifactIdversion1.0-SNAPSHOT/version/dependency/dependencies/project
三、服务调⽤ 前⽂已经编写了三个基础的微服务在⽤户下单时需要调⽤商品微服务获取商品数据。那应该怎么做 呢总⼈皆知商品微服务提供了供⼈调⽤的HTTP接⼝。所以可以再下定单的时候使⽤http请求的相关⼯ 具类完成如常⻅的HttpClient OkHttp当然也可以使⽤Spring提供的RestTemplate
1.RestTemplate介绍 Spring框架提供的RestTemplate类可⽤于在应⽤中调⽤rest服务它简化了与http服务的通信⽅式统 ⼀了RESTful的标准封装了http链接 我们只需要传⼊url及返回值类型即可。相较于之前常⽤的 HttpClient RestTemplate是⼀种更优雅的调⽤RESTful服务的⽅式。 在Spring应⽤程序中访问第三⽅REST服务与使⽤Spring RestTemplate类有关。 RestTemplate类的设 计 原则与许多其他Spring 模板类(例如JdbcTemplate、JmsTemplate)相同为执⾏复杂任务提供了⼀ 种具有默认⾏为的简化⽅法。 RestTemplate默认依赖JDK提供http连接的能⼒HttpURLConnection如果有需要的话也可以通过 setRequestFactory⽅法替换为例如 Apache HttpComponents、 Netty或OkHttp等其它HTTP library。 考虑到RestTemplate类是为调⽤REST服务⽽设计的因此它的主要⽅法与REST的基础紧密相连就不⾜ 为奇了后者是HTTP协议的⽅法:HEAD、GET、 POST、 PUT、 DELETE和OPTIONS。例如 RestTemplate类具有headForHeaders()、getForObject()、 postForObject()、 put()和delete()等⽅法。
2.RestTemplate⽅法介绍 分为三组
getForObject --- optionsForAllow 分为一组这类方法是常规的 Rest APIGET、POST、DELETE 等方法调用exchange接收一个 RequestEntity 参数可以自己设置 HTTP methodURLheaders 和 body返回 ResponseEntityexecute通过 callback 接口可以对请求和返回做更加全面的自定义控制。
3.通过RestTemplate调⽤微服务
(1)shop_order的控制层
RestController
public class OrderController {Autowiredprivate RestTemplate restTemplate;Autowiredprivate IOrderService orderService;//下单RequestMapping(/order/prod/{pid})public Order order(PathVariable(pid) Integer pid) {//调用商品微服务,查询商品信息Product product restTemplate.getForObject(http://localhost:8081/product/ pid, Product.class);//下单(创建订单)Order order new Order();order.setUid(1);order.setUsername(测试用户);order.setPid(pid);order.setPname(product.getPname());order.setPprice(product.getPprice());order.setNumber(1);orderService.createOrder(order);return order;}
}其中RestTemplate对象是用于在服务之间发起 HTTP 请求的模板类。它封装了 HTTP 请求和响应的处理逻辑提供了一组便捷的方法来与外部 RESTful 服务进行交互。 通过.getForObject方法调用商品微服务通过 HTTP GET 请求调用商品服务的接口获取商品信息。 然后再创建order对象通过mybatis-puls提供的接口来调用创建订单的方法
(2)shop_order的 service层
接口
public interface IOrderService extends IServiceOrder {//创建订单void createOrder(Order order);
} IService 是 MyBatis-Plus 提供的一个通用服务接口提供了许多 CRUD创建、读取、更新、删除操作的默认实现方法。继承了 IServiceOrder 后IOrderService 接口就拥有了这些通用的 CRUD 功能比如 save、remove、update、getById 等。
实现类:
Service
public class OrderServiceImpl extends ServiceImplOrderMapper, Order implements IOrderService {Autowired(required false)private OrderMapper orderMapper;Overridepublic void createOrder(Order order) {orderMapper.insert(order);}
} 这个继承了ServiceImpl抽象类是 MyBatis-Plus 提供的一个抽象类实现了IService接口的大部分常用方法又实现了IOrderService的接口通过继承 ServiceImplOrderServiceImpl 类自动获得了所有 CRUD 方法的实现无需手动编写这些基本操作的代码。
(3)shop_order的 OrderMappper数据访问层代码
Mapper
public interface OrderMapper extends BaseMapperOrder {
}BaseMapper 是 MyBatis-Plus 提供的一个通用 Mapper 接口已经实现了基本的 CRUD创建、读取、更新、删除操作。
(4)shop_order的 测试类主入口代码
SpringBootApplication
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class);}Beanpublic RestTemplate restTemplate() {return new RestTemplate();}} 因为控制器需要用到restTemplate所以在测试类中定义了一个RestTemplate的bean。
(5)shop_order的 测试类主入口代码
server:port: 8091
spring:application:name: service_orderdatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql:///shop?serverTimezoneUTCuseUnicodetruecharacterEncodingutf-8useSSLtrueusername: rootpassword: password 其中server:port代表配置Spring Boot 应用的服务器端口号。 spring: application: name: service-order配置应用程序的名称为 service-order。这个名称在微服务架构中很重要通常用于服务发现、注册中心如 Nacos 或 Eureka等场景。 后面的是配置数据库和jdbc的连接。 这里我就省略shop_product和shop_user的代码了同时执行三个模块通过shop_order中的restTemplate去调用地址实现获取商品信息和用户信息最后进行下单操作。 执行结果 在数据库中也可以查询到增加的订单信息。