操作系统:Windows

Java开发包:JDK1.8

项目管理工具:Maven3.6.0

项目开发工具:IntelliJIDEA

数据库:MySQL

Spring Cloud版本:Finchley.SR2

Spring Boot版本:2.0.6.RELEASE

商品模块实现

搭建goods-provider

步骤1:创建项目,引入依赖

在父工程web-store中创建Moudle,使用Spring Initializr方式创建一个名称为goods-provider的Spring Boot项目,将Artifact命名为goods-provider,添加Web、Eureka Client、MyBatis、公共实体类common、MySQL依赖。

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.bushuo</groupId>
    <artifactId>goods-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>goods-provider</name>
    <description>Demo project for Spring Boot</description>
    <url/>

    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!--mybatis依赖-->

        <dependency>

            <groupId>org.mybatis.spring.boot</groupId>

            <artifactId>mybatis-spring-boot-starter</artifactId>

              <version>2.0.1</version>

        </dependency>

        <!--eureka依赖-->

        <dependency>

            <groupId>org.springframework.cloud</groupId>

            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

        </dependency>

        <!--mysql依赖-->

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
            <scope>runtime</scope>

        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>

        <dependencies>

            <dependency>

                <groupId>org.springframework.cloud</groupId>

                <artifactId>spring-cloud-dependencies</artifactId>

                <version>Finchley.SR2</version>

                <type>pom</type>

                <scope>import</scope>

            </dependency>

        </dependencies>

    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

步骤2:在全局配置文件application.yml中添加Eureka、MySQL以及MyBatis的相关配置

在这里插入图片描述

步骤3:在项目启动类添加@EnableEurekaClient注解

在项目启动类上添加@EnableEurekaClient注解开启Eureka Client功能。
在这里插入图片描述

搭建goods-consumer

步骤1:创建项目,引入依赖

在父工程web-store中创建Moudle,使用Spring Initializr方式创建一个名称为goods-consumer的Spring Boot项目,将Artifact命名为goods-consumer,添加Web、Eureka Client、公共实体类common、Feign、Thymeleaf、Hystrix等依赖。

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.bushuo</groupId>
    <artifactId>goods-consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>goods-consumer</name>
    <description>Demo project for Spring Boot</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.bushuo</groupId>
            <artifactId>common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--feign依赖-->

        <dependency>

            <groupId>org.springframework.cloud</groupId>

            <artifactId>spring-cloud-starter-openfeign</artifactId>

           <version>2.0.0.RELEASE</version>

        </dependency>

        <!--web依赖-->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

        <!--eureka依赖-->

        <dependency>

            <groupId>org.springframework.cloud</groupId>

            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

        </dependency>

        <!--thymeleaf前端模板依赖-->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-thymeleaf</artifactId>

            <version>2.0.0.RELEASE</version>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-test</artifactId>

            <scope>test</scope>

        </dependency>

        <!--hystrix熔断依赖-->

        <dependency>

            <groupId>org.springframework.cloud</groupId>

            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>

            <version>2.0.0.RELEASE</version>

        </dependency>
    </dependencies>
    <dependencyManagement>

        <dependencies>

            <dependency>

                <groupId>org.springframework.cloud</groupId>

                <artifactId>spring-cloud-dependencies</artifactId>

                <version>Finchley.SR2</version>

                <type>pom</type>

                <scope>import</scope>

            </dependency>

        </dependencies>

    </dependencyManagement>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

步骤2:在全局配置文件application.yml中添加Eureka和Thymeleaf的相关配置信息

在这里插入图片描述

步骤3:在项目启动类添加@EnableEurekaClient和@EnableFeignClients注解

在项目启动类上添加@EnableEurekaClient注解开启Eureka Client功能,添加@EnableFeignClients注解开启Feign功能。
在这里插入图片描述

查询商品列表

步骤:

1.在工程goods-provider中定义查询商品接口

2.goods-consumer调用goods-provider中的接口实现查询商品功能

  1. 启动测试查询商品信息功能

在这里插入图片描述

步骤1:在工程goods-provider中定义查询商品信息接口

(1)在dao包的GoodsDao接口中,添加查询所有商品信息的方法、根据id查询商品方法
在这里插入图片描述

(2)在resources下的mapper包中的GoodsMapper.xml文件中配置商品查询接口
在这里插入图片描述
(3)在controller包中的GoodsController类中添加查询接口
在这里插入图片描述


goods-consumer程序结构:
在这里插入图片描述

步骤2:在工程goods-consumer中调用goods-provider中的接口实现商品查询功能

(1)在GoodsService接口中编写Feign组件调用goods-provider中接口的查询方法
在这里插入图片描述
(2)在GoodsServiceHystrix类中编写处理查询的熔断处理逻辑
在这里插入图片描述
(3)在GoodsController类中添加退出登录的请求/quit,返回到登录页面
在这里插入图片描述
(4)在GoodsController类中添加查询所有商品列表的请求
在这里插入图片描述
因登录成功后直接跳转到首页显示商品列表,要获取登录名显示在首页上,故修改user-consumer中的UserController中的/login请求如下:
在这里插入图片描述
(5)在resources下的templates目录中创建静态页面

<!DOCTYPE html>

<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns="http://www.w3.org/1999/html">

<head>

    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

    <title>首页</title>

</head>

<body>

<div th:if="${session.uname} ne null">

    欢迎您:<em th:text="${session.uname}"></em><br>

    <a href="http://localhost:8005/goods/quit">退出</a>

</div>

<div th:if="${session.uname} eq null">

    <a href="http://localhost:8003/admin/tologin">请您登陆</a>

</div>

<h1 align="center">首页</h1>

<div align="center">

    <form action="/goods/getName">

        商品名:<input type="text" name="name" placeholder="搜索商品"/>

        <input type="submit" value="搜索"/>

    </form>

    <table style="border:1px solid;width:600px;text-align:center">

        <thead>

        <tr bgcolor="green">

            <td>编号</td>

            <td>名称</td>

            <td>操作</td>

        </tr>

        </thead>

        <tbody>

        <tr th:each="good:${goods}">

            <td th:text="${good.gid}"></td>

            <td th:text="${good.gname}"></td>

            <td>

                <a th:href="@{'http://localhost:8005/goods/detail?id='+${good.gid}}">详情</a>

                <a th:href="@{'http://localhost:8005/goods/deleteGoods?id='+${good.gid}}">删除</a>

            </td>

        </tr>

        </tbody>

    </table>

    <h3><a href="http://localhost:8005/goods/toAddGoods">添加新商品</a></h3><br>

</div>

</body>

</html>

在登录页面上输入正确的用户名密码测试,能否跳转到getAll请求显示商品列表。
不能跳转
http://localhost:8005/goods/getAll?uname=

查询商品详情

商品列表中点击"详情"链接,即可跳转到当前商品详情页面。

思路:点击详情链接的同时,将当前商品的id传递到处理的请求中,根据id查询出当前商品所有具体信息。

(1)在GoodsController类中添加查询商品详情的请求
在这里插入图片描述
(2)在resources下的templates目录中创建静态页面

detail.html:

删除商品
商品列表中点击"删除"链接,即可将当前商品从列表中清除。

思路:点击删除链接的同时,将当前商品的id传递到删除的请求中,根据id从商品表中将当前商品删除。
步骤1:在工程goods-provider中定义商品删除接口
(1)在dao包的GoodsDao接口中,添加删除商品信息的方法、根据id删除商品
在这里插入图片描述
(2)在resources下的mapper包中的GoodsMapper.xml文件中配置商品删除接口
在这里插入图片描述
(3)在controller包中的GoodsController类中添加删除商品接口
在这里插入图片描述
步骤2:在工程goods-consumer中调用goods-provider中的接口实现商品删除功能

(1)在GoodsService接口中添加商品删除方法deleteGoods的声明
在这里插入图片描述
(2)在GoodsServiceHystrix类中编写处理删除的熔断处理逻辑
在这里插入图片描述
(3)在GoodsController类中添加删除商品的请求
在这里插入图片描述
在这里插入图片描述

如果日志是登入失败,查看源码.

总结

基于Spring Cloud的电商系统在用户与商品模块的设计与实现中,注重了系统的安全性、灵活性和用户体验。通过微服务架构,系统不仅能够支持高并发请求,还能方便地进行功能扩展。未来,可以结合人工智能与大数据分析,进一步优化用户推荐系统和库存管理,提升整体运营效率和用户满意度

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐