SpringCloudAlibaba商城实战项目(day01)

news2024/11/17 6:47:59

前言

闲来无事在B站找了一个项目,是谷粒商城的项目,于是乎照着在敲这个项目,特此记录一下。会持续更新到这个项目敲完。这个记录偏向小白向,确保你照着敲也可以完成所有项目的搭建。

一、简介

1.1、项目架构图

image-20230101203937988.png

image-20230101203937988

1.2、服务列表

商城基础的服务有5个:

  1. mall-coupon:商城优惠卷服务
  2. mall-member:商城会员服务
  3. mall-order:商城订单服务
  4. mall-product:商城商品服务
  5. mall-ware:商城仓储服务

二、整合人人开源

2.1、后端

我们将整合人人开源的手脚架作为后端的管理系统,地址给出:

  1. 人人开源后端项目:https://gitee.com/renrenio/renren-fast
  2. 人人开源前端项目:https://gitee.com/renrenio/renren-fast-vue
  3. 人人开源代码生成器:https://gitee.com/renrenio/renren-generator

将人人开源后端项目clone下来以后,将他改名,变成项目的一个服务:mall-admin,同时在主项目中引用。

image-20230105091741106

在admin-mall中的application.yml中可以修改context-path属性配置,以后地址访问的时候要加上配置的属性。

image-20230105091945522

比如说我配置的是/mall-admin

导入人人开源数据库,启动项目后端项目,这样我们的后端项目脚手架就大功告成。

image-20230105092139889

地址栏输入http://localhost:8080/mall-admin/,出现一串json串即表示部署成功。

image-20230105092329836

2.2、前端

前端需要的环境是nodejs,但是注意环境不要太高,会出现部分部署问题,配置好了nodejs环境后,输入node-v查看版本。

image-20230105092444703

如果你刚刚修改了application.yml中的context-path属性配置的话需要修改前端js的配置,否则会出现404。

image-20230105092911364

clone下来前端项目后,直接cmd输入命令:

npm install

他会自动开始下载前端的依赖以及js文件。

image-20230105092630578

nice,没有错误。

image-20230105092938528

接下来可以开始跑前端项目。

npm run dev

这些命令在pack.json中都可以找得到。

image-20230105093122047

等亿秒钟后,项目也启动好了。

image-20230105093444864

大功告成。

image-20230105093522250.png

2.2、代码生成器

有很多的crud代码是不需要我们再去手动写了的,很繁琐,所以就有了代码生成器,帮我们生成一些简单的代码,我们clone下来代码生成器项目后,就可以开始配置代码生成器开始生成代码了。

首先先修改数据库的配置,修改为自己的账号密码

image-20230105093910068

image-20230105094202446

由于人人开源代码生成器使用的是shiro作为权限管理框架,后期我们需要全部换成SpringSecurity,所以我们需要在模板中将shiro注解全部注释掉。

image-20230105094417644

其他遇到了我们在生成的代码中删掉即可。

然后启动代码生成器项目,端口号为80。

image-20230105094642608

直接访问http://localhost:80/,即可开始生成代码。

image-20230105094811006

下载下来以后将main目录直接copy到porduct模块中,下载完以后会报错,因为少了一些代码模块,新建一个mall-common,用于存放一些项目公共的工具类和依赖,新建一个mall-common模块,把renren-fast中的utils文件复制过去,新建一个utils文件。

image-20230105121416192

image-20230105121503429

此时还是会报错,说明我们还没有引入这个依赖,我们还需要在product模块中引入这个依赖。

image-20230105122619893

        <dependency>
            <groupId>cn.linstudy</groupId>
            <artifactId>mall-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

在外部pom文件中添加common这个模块。

<module>mall-admin</module>

最后再把mall-admin中的xss文件夹挪到mall-common中即可,因为xss里面的功能其他项目也是可以使用的。

我们首先需要引用common的包,并且将版本控制交给properties进行管理,方便我们解耦。

    <properties>
        <commons.lang.version>2.6</commons.lang.version>
        <java.version>8</java.version>
    </properties>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>${commons.lang.version}</version>
        </dependency>

最后再将报错的RRException直接剪切到commonexception专门处理异常的包里即可。

大功告成,启动我们的mall-admin项目即可。

三、整合MyBatis-Plus

3.1、整合测试MyBatis-Plus

我们首先在mall-common中导入MySQL驱动,我是5.x,所以我的驱动也是5.x驱动,如果是8.x就需要配置8.x驱动,加入了驱动,那么mybatis-plus整合springboot也是不可或缺的,一起搞进来。

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.2</version>
</dependency>

配置好驱动后,创建一个application.yml来书写数据库相关的配置。

server:
  port: 10000
  servlet:
    session:
      timeout: 30m

spring:
  application:
    name: mall-product
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/mall-admin?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.jdbc.Driver

于是乎,数据源就配置好了。

接着我们就去配置mapper接口扫描,在mall-product服务中的运行类MallProductApplication配置Mapper接口扫描,告诉MyBaits-Plus我们的mapper接口何在。

@MapperScan("cn.linstudy.product.dao")

如果书写复杂的sql还是得借助xml文件来书写,所以我们还是得告诉mybatis-plus我们的xml文件在哪里。在application.yml中告诉mybatis-plus我们的sql映射文件何在。

mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml

在新增的时候,我们还希望主键可以自增,所以还需要在application.yml中配置主键自增,等到数据量大起来的时候,我们需要分库分表,到时候再去修改为其他的主键自增策略。搞了那么多,我们需要测试一下,看看配置是否全部搞定了,在test文件夹中写一个测试类。一启动后,发现直接报错了,一查看,原来是我们的springboot版本太高了,需要更换版本,更换到3.x以前的版本。

image-20230105162653606

于是乎把springboot-parent版本降低即可。

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.8.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

浅浅的写一个测试类即可开测!

package cn.linstudy.product;

import cn.linstudy.product.entity.BrandEntity;
import cn.linstudy.product.service.BrandService;
import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@SpringBootTest
@RunWith(SpringRunner.class)
public class MallProductApplicationTests {

    @Autowired
    BrandService brandService;

    @Test
    public void contextLoads() {
        QueryChainWrapper<BrandEntity> query = brandService.query();
        List<BrandEntity> brandEntities = query.getBaseMapper().selectList(null);
        for (BrandEntity brandEntity : brandEntities) {
            System.out.println(brandEntity);
        }
    }


}

image-20230105181217933

3.2、逆向生成所有服务的代码

3.2.1、mall-coupon(优惠服务)

coupon优惠服务对应的数据库是mall-sms,我们修改配置来逆向生成代码。修改renren-generator服务的generator.properties文件中的配置即可。

image-20230105184346409

启动项目逆向生成代码即可。

3.2.2、mall-member(会员服务)

member会员服务对应的数据库是mall-ums,我们修改配置来逆向生成代码。修改renren-generator服务的generator.properties文件中的配置即可。

3.2.3、mall-order(订单服务)

order订单服务对应的数据库是mall-oms,我们修改配置来逆向生成代码。修改renren-generator服务的generator.properties文件中的配置即可。

3.2.4、mall-wms(库存服务)

wms库存服务对应的数据库是mall-wms,我们修改配置来逆向生成代码。修改renren-generator服务的generator.properties文件中的配置即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/160486.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CAN Bus cable simulation

REF&#xff1a;CAN总线标准接口与布线规范 https://zhuanlan.zhihu.com/p/34333969高速CAN总线物理层对线束的要求 https://www.suncve.com/the-requirement-of-physical-layer-of-can-bus-for-wiring-harness/利用LTSPICE 做仿真&#xff0c; 选用的是 ADI的 CAN transceiver…

RabbitMQ快速入门之进阶

RabbitMQ快速入门之进阶 进阶RabbitMQ快速入门之进阶1、confirm 模式的设置2、return 退回模式的处理3、消费者 Ack&#xff0c;手动确认4、消费端限流 (流量削缝)5、TTL存活时间过期时间6、死信队列DLX7、延迟队列 &#xff08;TTL DLX&#xff09;1、confirm 模式的设置 *c…

VSCode使用Clangd

前言 在使用微软的C/C插件时&#xff0c;遇到较大项目时&#xff0c;代码提示速度非常的慢&#xff0c;这时可以使用clangd 1、系统安装clangd 版本选择&#xff1a;Linux github仓库: https://github.com/clangd/clangd/releases 解压下载好的安装包&#xff1a; unzip cla…

Python实现小米蓝牙温湿度计2 Home Assistant 自定义组件源码

小米 米家蓝牙温湿度计2 这是一个Home Assistant自定义组件&#xff0c;用于 Home Assistant 通过 蓝牙适配器 直接集成 小米 米家蓝牙温湿度计 (LYWSDCGQ/01ZM) 和 米家蓝牙温湿度计2 (LYWSD03MMC)。 v0.2.0-dev版本以后&#xff0c;已经支持自动发现功能&#xff0c;不需要…

Leetcode:501. 二叉搜索树中的众数(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 通用写法&#xff08;递归&#xff09;&#xff1a; 原理思路&#xff1a; 依据二叉搜索树特性写法&#xff08;递归&#xff09;&#xff1a; 原理思路&#xff1a; 迭代&#xff1a; 原理思路&#xff1a; 问题…

Android Compose——一个简单的新闻APP

Owl简述效果视频导航导航结点路线图底部导航栏使用标签页状态切换FeaturePage构建CoursePage实现搜索ViewModelView详情页DetailDescribeLesson尾Gitte简述 此Demo是参考Google Github其中一个Demo而完成&#xff0c;涉及的内容并不复杂&#xff0c;主要是为了熟悉Compose编码…

2022爱分析・出海数字化系列报告之“出海实时互动与通信”厂商全景报告 | 爱分析报告

报告编委 张扬 爱分析联合创始人&首席分析师 文鸿伟 爱分析高级分析师 王鹏 爱分析分析师 目录 研究范围定义厂商全景地图市场分析与厂商评估入选厂商列表研究范围定义 研究范围 改革开放四十多年来&#xff0c;中国企业经历了自商品出海到当前的品牌出海&#xff0c;出海…

Servlet的使用

作者&#xff1a;~小明学编程 文章专栏&#xff1a;JavaEE 格言&#xff1a;热爱编程的&#xff0c;终将被编程所厚爱。 目录 什么是Servlet&#xff1f; 创建一个Servlet程序 1.创建一个Maven项目 2.引入依赖 3.创建目录 4.编写代码 5.打包 6.部署程序 7.验证程序 …

Rust如何进行模块化开发?

类似es6的模块化&#xff0c;Rust通过package、create、module来实现代码的模块化管理 Rust如何进行模块化开发&#xff1f; Rust的代码组织包括&#xff1a;哪些细节可以暴露&#xff0c;哪些细节是私有的&#xff0c;作用域内哪些名称有效等等。 而这些功能被统称为模块系统…

晒成绩单了,百度智能云交出2022年终大考试卷!

晒成绩单了&#xff0c;百度智能云交出2022年终大考试卷&#xff01; 2023年伊始&#xff0c;工厂加快步伐复工复产、城市烟火气涌现、消费活力加速释放&#xff0c;企业对未来发展呈现乐观预期。有外媒称&#xff0c;“中国经济将实现比预期更快的复苏””。 站在更宏观的视…

java入门到废为止

目录基础数据变量类型数据类型基本类型上下转型引用类型类型对比装箱拆箱缓存池输入数据数组初始化元素访问内存分配数组异常二维数组运算参数形参实参可变参数方法方法概述定义调用注意事项方法重载重载介绍方法选取继承重载参数传递枚举Debug对象概述类定义构造器包封装thiss…

【React】二.JSX

目录 二.JSX JSX的基本使用 jsx使用步骤 JSX中使用JavaScript表达式 嵌入JS表达式 注意点 JSX的条件渲染 问题记录 JSX的列表渲染 JSX的样式处理 总结 二.JSX JSX的基本使用 createElement()的问题繁琐不简洁不能直观看出所描述的结构不优雅&#xff0c;用户体验不佳…

Java设计模式-代理模式Proxy

介绍 代理模式是一种比较好理解的设计模式。简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问&#xff0c;这样就可以在不修改原目标对象的前提下&#xff0c;提供额外的功能操作&#xff0c;扩展目标对象的功能。 代理模式的主要作用是扩展目标对象的功能&a…

Linux编译器-gcc/g++的使用

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容主要介绍了Linux编译器g/gcc的相关使用方法&#xff0c…

Linux学习笔记——分布式内存计算Flink环境部署

5.13、分布式内存计算Flink环境部署 5.13.1、简介 Flink同Spark一样&#xff0c;是一款分布式内存计算引擎&#xff0c;可以支撑海量数据的分布式计算。 Flink在大数据体系同样是明星产品&#xff0c;作为最新一代的综合计算引擎&#xff0c;支持离线计算和实时计算。 在大…

libcurl库及curl API的简介

目录 一、libcurl简介 二、curl API简介 三.库安装编译方法 内容来源&#xff1a;Http协议之libcurl实现 - 谢呈勖 - 博客园 (cnblogs.com) 一、libcurl简介 libcurl是一个跨平台的网络协议库&#xff0c;支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。…

当 Rainbond 遇上龙蜥!小龙带你玩转一站式云原生,点击开启

Rainbond 是一个云原生应用管理平台&#xff0c;使用简单&#xff0c;不需要懂容器、Kubernetes 和底层复杂技术&#xff0c;支持管理多个 Kubernetes 集群&#xff0c;和管理企业应用全生命周期。主要功能包括应用开发环境、应用市场、微服务架构、应用交付、应用运维、应用级…

Golang的Fork/Join实现

做过Java开发的同学肯定知道&#xff0c;JDK7加入的Fork/Join是一个非常优秀的设计&#xff0c;到了JDK8&#xff0c;又结合并行流中进行了优化和增强&#xff0c;是一个非常好的工具。1、Fork/Join是什么Fork/Join本质上是一种任务分解&#xff0c;即&#xff1a;将一个很大的…

FPGA图像处理HLS实现RGB转灰度,提供HLS工程和vivado工程源码

目录一、图像RGB转灰度原理二、HLS方案实现三、HLS在线仿真并导出IP四、Kintex7开发板vivado工程验证五、zynq7100开发板vivado工程验证六、板级调试验证七、福利&#xff1a;工程源码获取一、图像RGB转灰度原理 图像rgb转灰度图有固定的公式&#xff0c;具体公式csdn一大堆&a…

mirco:bit是什么?小学生拿着它就能召唤神龙?

mirco:bit是什么&#xff1f;micro:bit是一款由英国广播电视公司(BBC) 为青少年编程教育设计&#xff0c;并由微软&#xff0c;三星&#xff0c;ARM&#xff0c;英国兰卡斯特大学等合作伙伴共同完成开发的微型电脑。BBC希望通过micro:bit驱动青少年参与到创造性的硬件制作和软件…