当前位置: 首页 > news >正文

商城型网站建设怎么建立本地网站

商城型网站建设,怎么建立本地网站,网站发帖做业务,网站开发设备费用计入什么科目目录 1.工程搭建部署 方案一#xff1a;完整工程导入 方案二#xff1a;从零开始搭建 1.工程与module创建 2.数据库导入 3.项目启动 3.1 启动并访问user-service 3.2 启动并访问order-service 4.服务远程调用 时序图说明 服务远程调用实现 注入RestTemplate Res… 目录 1.工程搭建部署 方案一完整工程导入 方案二从零开始搭建 1.工程与module创建 2.数据库导入 3.项目启动 3.1 启动并访问user-service 3.2 启动并访问order-service 4.服务远程调用 时序图说明 服务远程调用实现 注入RestTemplate RestTemplate完成远程服务调用 重启并访问order-service RestTemplate如何实现远程服务调用 5.总结 6.推荐阅读资料 1.工程搭建部署 方案一完整工程导入 cloud.zip如无法运行尝试换未编译版cloud-demo.zip 下载解压上述工程ide工具导入  方案二从零开始搭建 1.工程与module创建 1.1 父工程创建 1.2 子module创建 module名称order-service、user-service 无效文件夹删除整体结构如图2  1.3 父pom资源引入 粘贴以下资源依赖粘贴后maven会自动拉取依赖如未拉取请手动刷新 parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.9.RELEASE/versionrelativePath/ /parent ​ propertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingjava.version1.8/java.versionspring-cloud.versionHoxton.SR10/spring-cloud.versionmysql.version5.1.47/mysql.versionmybatis.version2.1.1/mybatis.versionlombok.version1.18.20/lombok.version /properties ​ dependencyManagementdependencies!-- springCloud --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency!-- mysql驱动 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion${mysql.version}/version/dependency!--mybatis--dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion${mybatis.version}/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion${lombok.version}/version/dependency/dependencies /dependencyManagement 1.4 子module资源引入 user-service dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependency!--mybatis--dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency /dependencies buildfinalNameapp/finalNamepluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins /build order-service dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependency!--mybatis--dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency /dependencies buildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins /build 1.5 业务代码编写 1.user-service application.yml配置文件 server:port: 8081 spring:datasource:url: jdbc:mysql://localhost:3306/cloud_user?useSSLfalseusername: rootpassword: root123456driver-class-name: com.mysql.jdbc.Driver mybatis:type-aliases-package: cn.itcast.user.pojoconfiguration:map-underscore-to-camel-case: true logging:level:cn.itcast: debugpattern:dateformat: MM-dd HH:mm:ss:SSS |--mapper |-- UserMapper package cn.itcast.user.mapper; ​ import cn.itcast.user.pojo.User; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; ​ /*** 用户持久层** author * date 2022-12-22 14:12*/ public interface UserMapper { ​/*** 根据ID查找用户* param id   用户ID* return     用户实体信息*/Select(select * from tb_user where id#{id})User findById(Param(id) Long id); } |--pojo |-- User package cn.itcast.user.pojo; ​ import lombok.Data; ​ /*** 用户实体** author * date 2022-12-22 14:07*/ Data public class User { ​/*** 主键ID*/private Long id; ​/*** 用户姓名*/private String username; ​/*** 用户地址*/private String address; } |--service |-- UserService package cn.itcast.user.service; ​ import cn.itcast.user.mapper.UserMapper; import cn.itcast.user.pojo.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; ​ import java.util.Objects; ​ /*** 用户业务层** author * date 2022-12-22 14:13*/ Service public class UserService { ​Autowiredprivate UserMapper userMapper; ​/*** 根据ID查找用户* param id   用户ID* return     用户实体信息*/public User findById(Long id) {if (Objects.isNull(id)) {return null;}return userMapper.findById(id);} ​ } |--web |-- UserController package cn.itcast.user.web; ​ import cn.itcast.user.pojo.User; import cn.itcast.user.service.UserService; 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.RequestMapping; import org.springframework.web.bind.annotation.RestController; ​ /*** 用户控制层** author * date 2022-12-22 14:15*/ RestController RequestMapping(/user) public class UserController { ​Autowiredprivate UserService userService; ​/*** 根据ID查找用户* param id   ID* return     用户信息*/GetMapping(/{id})public User findById(PathVariable(id) Long id) {return userService.findById(id);} } |--UserApplication package cn.itcast.user; ​ import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; ​ /*** 启动类** author * date 2022-12-22 14:00*/ MapperScan(cn.itcast.user.mapper) SpringBootApplication public class UserApplication { ​public static void main(String[] args) {SpringApplication.run(UserApplication.class, args);System.out.println(用户工程启动成功);} } 2.order-service application.yml配置文件 server:port: 8080 spring:datasource:url: jdbc:mysql://localhost:3306/cloud_order?useSSLfalseusername: rootpassword: root123456driver-class-name: com.mysql.jdbc.Driver mybatis:type-aliases-package: cn.itcast.order.pojoconfiguration:map-underscore-to-camel-case: true logging:level:cn.itcast: debugpattern:dateformat: MM-dd HH:mm:ss:SSS |--mapper |-- OrderMapper package cn.itcast.order.mapper; ​ import cn.itcast.order.pojo.Order; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; ​ /*** 订单持久层** author * date 2022-12-22 14:22*/ public interface OrderMapper { ​/*** 根据ID查找订单* param id   订单ID* return     订单对象*/Select(select * from tb_order where id#{id})Order findById(Param(id)Long id); } |--pojo |-- Order package cn.itcast.order.pojo; ​ import lombok.Data; ​ /*** 订单实体(vo并非dto)** author * date 2022-12-22 14:19*/ Data public class Order { ​/*** 主键ID*/private Long id; ​/*** 用户主键ID*/private Long userId; ​/*** 商品名称*/private String name; ​/*** 商品价格*/private Long price; ​/*** 商品数量*/private Integer num; ​/*** 用户信息*/private User user; } |-- User package cn.itcast.order.pojo; ​ import lombok.Data; ​ /*** 用户实体** author * date 2022-12-22 14:07*/ Data public class User { ​/*** 主键ID*/private Long id; ​/*** 用户姓名*/private String username; ​/*** 用户地址*/private String address; } |--service |-- OrderService package cn.itcast.order.service; ​ import cn.itcast.order.mapper.OrderMapper; import cn.itcast.order.pojo.Order; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; ​ /*** 订单业务层** author * date 2022-12-22 14:24*/ Service public class OrderService { ​Autowiredprivate OrderMapper orderMapper; ​/*** 根据ID查找订单* param id   订单ID* return     订单对象*/public Order findById(Long id) {Order order orderMapper.findById(id);return order;} } |--web |-- OrderController package cn.itcast.order.web; ​ import cn.itcast.order.pojo.Order; import cn.itcast.order.service.OrderService; 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.RequestMapping; import org.springframework.web.bind.annotation.RestController; ​ /*** 订单控制层** author * date 2022-12-22 14:25*/ RestController RequestMapping(/order) public class OrderController { ​Autowiredprivate OrderService orderService; ​/*** 根据ID查找订单* param orderId   订单ID* return           订单对象*/GetMapping(/{orderId})public Order findById(PathVariable(orderId)Long orderId) {return orderService.findById(orderId);} } |--OrderApplication package cn.itcast.order; ​ import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; ​ /*** 启动类** author * date 2022-12-22 14:05*/ MapperScan(cn.itcast.order.mapper) SpringBootApplication public class OrderApplication { ​public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);System.out.println(订单工程启动成功); ​} } 2.数据库导入 需参见上图新建两个数据库然后导入DDL语句 cloud-order.sql cloud-user.sql 导完如下 3.项目启动 3.1 启动并访问user-service 3.2 启动并访问order-service 观察发现虽然order-service服务调用成功但是里面的user对象却是空的。原因我们应该也可以了解到是因为User对象数据数存储在数据库tb_user而此工程连接数据库是tb_order查询此数据库时无法获取对应的User数据怎么获取获取的具体实现我们将在下一章节进一步铺开。  4.服务远程调用 分析现有链路调用关系可以发现 http://localhost:8081/user/{id} 可以获取用户信息 http://localhost:8081/order/{orderId} 可以获取订单信息但是用户信息为空 想要订单信息中返回用户信息只要在获取订单链路中追加对用户信息的获取、返回值的组装即可由此引申出微服务之间的远程服务调用具体调整可见下图。 时序图说明 上述图形为时序图一般用来描述系统与系统之间的交互流程主要是交互API、代码顺序、参数一般忽略时序图不同于业务流程更关注业务实现过程中系统前后依赖数据请求与返回以下为笔者实际工作场景示例 服务远程调用实现 注入RestTemplate 此处推荐一个小的优雅工具Carbon | Create and share beautiful images of your source code RestTemplate完成远程服务调用 在此笔者除了完成远程服务调用同时对代码做了结构化、异常校验、函数封装。虽然此处逻辑并不复杂但是对于主干逻辑简化和代码风格希望能起到一个引导作用。 package cn.itcast.order.service; ​ import cn.itcast.order.mapper.OrderMapper; import cn.itcast.order.pojo.Order; import cn.itcast.order.pojo.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; ​ import java.util.Objects; ​ /** * 订单业务层 * * author * date 2022-12-22 14:24 */ Service public class OrderService { ​Autowiredprivate OrderMapper orderMapper; ​Autowiredprivate RestTemplate restTemplate; ​/*** 根据ID查找订单* param id   订单ID* return     订单对象*/public Order findById(Long id) { ​// step 1 : 查询订单原始数据Order order orderMapper.findById(id);if (Objects.isNull(order)) {return null;} ​// step 2 : 查询用户数据User user queryUserInfoById(order.getUserId()); ​// step 3 : 组装用户数据if (Objects.nonNull(user)) {order.setUser(user);} ​// step 4: 数据返回return order;} ​/*** 根据用户ID查找用户信息* param userId   用户ID* return         用户信息*/private User queryUserInfoById(Long userId) {String url http://localhost:8081/user/ userId;return restTemplate.getForObject(url, User.class);} } 重启并访问order-service RestTemplate如何实现远程服务调用 5.总结 本节笔者带领大家完成了SpringCloud工程从0-1的搭建当然你不想搭建也可以直接采用方案一二者等效至此读者们完成了一个微服务工程的搭建、部署、访问。同时在本节最后一章笔者基于RestTemplate发起的http请求实现远程调用实现当A系统想要获取B系统数据时的跨系统数据交互。然而RESTful API(进一步了解可移步链接)访问并不是微服务的唯一解决方案如Dubbo的交互一样可以实现希望读者们能不限于此。 在本章节笔者希望大家对于微服务的拆分服务调用关系有个初步认知本例中当order-service调用user-service时前者就充当了服务调用方后者则是服务提供方这种调用关系在后续我们将会大量使用。 思考问题 如何实现服务远程调用 服务远程调用解决了什么问题 还有哪些技术可以实现远程服务调用 6.推荐阅读资料 了解时序图绘制https://www.cnblogs.com/liuyitan/p/16631240.html
http://www.eeditor.cn/news/126639/

相关文章:

  • 2022没封的网站免费的网站建设基础大纲文案
  • 做p2p网站卖赚钱吗网页和网站区别
  • 批量发布网站手机安装wordpress
  • 哪个网站专门做邮轮旅游的关于设计的网站
  • 餐饮网站开发毕业设计模板石家庄做网络科技公司
  • 企业网站设计服务公司ps做网站72分辨率
  • 网站建设商业阶段软件开发模型案例
  • 一起做网站可以一件代发吗网页设计欣赏英文翻译
  • 搜索关键词的网站下载百度浏览器
  • 网站空间可以转移吗wordpress的极限
  • 查网站关键词工具茂名市电白区住房和城乡建设局网站
  • 深圳大型网站建设服务建网站一年要多少钱
  • 雁塔网站建设广东汇鑫科技网站建设
  • 网站模板 商标遂宁市做网站的公司
  • 文章类网站后台1个空间做两个网站
  • 行业网站设计公司用html5做课程教学网站
  • 建设银行企业网站首页新开网站seo
  • 潍坊网站建设熊掌号汽车保养网站模板
  • 网站技术支持是什么山东定制版网站建设公司
  • 建设信用卡申请官方网站建网站投放广告赚钱
  • 哈尔滨网站建设网络优化重庆免费网站推广软件
  • 大连网站开发 简维科技深圳做营销网站制作
  • 哪家建设公司网站网站建设进度汇报
  • 网站开发有前途么c2c模式在我国开始于1999年的
  • 楚风网站建设工作室wordpress怎么写接口
  • 内江建设局网站陕西煤化建设集团铜川分公司网站
  • 打开有些网站显示建设中搭建网站要用到的工具
  • 找最新游戏做视频网站有哪些2014网站seo
  • 专业酒店建设信息网站西安好的设计公司
  • 德州哪里有学做网站的手机版网页制作软件