亿级高并发电商项目-- 实战篇 --万达商城项目 三(通用模块、商品服务模块、后台API模块、IDEA忽略文件显示等开发工作

news2024/11/19 2:39:26

专栏:高并发项目 

👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者
📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶
📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人 

  

创建父工程

1 创建名为 shopping 的普通 maven工程

2 修改pom文件,将 shopping 工程设置为父工程,并将 shopping 的父工程设置为 spring-boot-starter-parent

<groupId>com.ittxc</groupId>
<artifactId>shopping</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 该工程为SpringBoot工程 -->
<parent>
  
<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.0</version>
    <relativePath/>
</parent>
<!-- 子模块 -->
<modules>
    
</modules>

创建通用模块

使用Dubbo时,服务的生产者消费者都要引入服务接口,所以我 们构建一个通用模块,在通用模块中存放Dubbo服务接口,服务的生产者和消费者都会引用该模块。除了服务接口,我们还会存放一 些实体类、工具类等通用功能,每个模块都会引用通用模块。

 1、创建名为 shopping_common 的 SpringBoot工程,添加相关依赖。

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

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

    <!-- lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>

    <!-- MyBatisPlus -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-bootstarter</artifactId>
        <version>3.5.0</version>
    </dependency>

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

2、设置该工程的父工程为 shopping

<parent>
    <groupId>com.ittxc</groupId>
    <artifactId>shopping</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

3、给 shopping 工程设置通用子模块

<!-- 子模块 -->
<modules>
    <!-- 通用模块,包含实体类、服务接口、工具类等-->
    <module>shopping_common</module>
</modules>

4、创建pojo文件夹,编写实体类。

5、创建名为baizhanshopping的数据库,将数据库脚本导入mysql 中。

6、在通用模块添加 service 包存放服务接口,添加 util 包存放工具类。

 

创建商品服务模块 

接下来我们编写整个项目的第一个功能:分页查询品牌列表。品牌和商品有关,所以品牌管理的代码写在商品服务模块中。首先创建商品服务模块。

1、创建名为 shopping_goods_service 的SpringBoot工程,添加相关依赖。

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

    <!-- MyBatisPlus -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.0</version>
    </dependency>

    <!-- mysql驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <!-- 主工程 -->
    <dependency>
        <groupId>com.itbaizhan</groupId>
        <artifactId>shopping_common</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>

    <!-- dubbo -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.8</version>
    </dependency>

    <!-- 操作zookeeper -->
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>4.2.0</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

2、设置该工程的父工程为 shopping

<parent>
    <groupId>com.ittxc</groupId>
    <artifactId>shopping</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

3、给 shopping 工程设置子模块

<!-- 子模块 -->
<modules>
    <!-- 通用模块,包含实体类、服务接口、工具类等-->
    <module>shopping_common</module>

    <!-- 商品服务 -->
    <module>shopping_goods_service</module>
</modules>

4、编写配置文件 application.yml

# 端口号
server:
 port: 9001
# 日志格式
logging:
 pattern:
   console: '%d{HH:mm:ss.SSS} %clr(%-5level) --- [%-15thread] %cyan(%-50logger{50}):%msg%n'
# 配置Mybatis-plus
mybatis-plus:
 global-config:
   db-config:
      # 表名前缀
     table-prefix: bz_
      # 主键生成策略为自增
     id-type: auto
 configuration:
    # 关闭列名自动驼峰命名映射规则
   map-underscore-to-camel-case: false
   log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启sql日志
spring:
  # 数据源
 datasource:
   driver-class-name: com.mysql.cj.jdbc.Driver
   url: jdbc:mysql:///baizhanshopping?serverTimezone=UTC
   username: root
   password: root
dubbo:
 application:
   name: shopping_goods_service # 项目名
 registry:
   address: zookeeper://192.168.0.159 #注册中心地址
   port: 2181 # 注册中心端口号
   timeout: 10000 # 注册到zk上超市时间,ms
 protocol:
   name: dubbo # dubbo使用的协议
   port: -1 # 自动分配端口
 scan:
   base-packages: com.itbaizhan.shopping_goods_service.service # 包扫描

编写根据id查询品牌功能

接下来我们在商品服务模块编写根据id查询品牌的代码

1、创建品牌 Mapper 接口 

public interface BrandMapper extends BaseMapper<Brand> { }

2、配置启动类扫描 MyBatis-Plus 接口

@SpringBootApplication
@MapperScan("com.ittxc.shopping_goods_service.mapper")
public class ShoppingGoodsServiceApplication {
    public static void main(String[] args)
{
      
SpringApplication.run(ShoppingGoodsServiceApplication.class, args);
   }
}

3、在通用模块添加品牌服务接口

/**
* 品牌服务
*/
public interface BrandService {
    Brand findById(Long id);
}

 4、在商品服务模块创建品牌服务接口实现类

@DubboService
@Transactional
public class BrandServiceImpl implements BrandService {
    @Autowired
    private BrandMapper brandMapper;
    /**
     * 根据id查询品牌
     * @param id
     * @return
     */
    @Override
    public Brand findById(Long id) {
        return brandMapper.selectById(id);
   }
}

创建网站后台API模块

API指预先定义的HTTP接口。在前后端分离项目中,前后端开发人员对一个控制器的访问路径、参数、返回值进行约定。后端人员编 写控制器时,根据约定查询并返回前端人员需要的数据。

万达商城分为网站前台和网站后台,网站前台是用户访问的,可以查询商品、购买商品;网站后台是管理员访问的,可以维护商品。 由于网站后台的访问量有限,我们将网站后台的所有控制器都放入 后台的API模块。前端项目访问该模块的控制器,控制器返回json数 据给前端。后台的API模块并不能查询数据,它只是dubbo服务的消费者,需要连接dubbo服务的提供者才能查询到数据。 

 

1、创建名为 shopping_manager_api 的SpringBoot工程,添加相关依赖。 

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

    <!-- dubbo -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.8</version>
    </dependency>

    <!-- 操作zookeeper -->
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>4.2.0</version>
    </dependency>
    <dependency>
        <groupId>com.ittxc</groupId>
        <artifactId>shopping_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>
</dependencies>

 2、设置该工程的父工程为 shopping

<parent>
    <groupId>com.ittxc</groupId>
    <artifactId>shopping</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

3、给 shopping 工程设置Mapper子模块

<!-- 子模块 -->
<modules>
    <!-- 管理员管理网站操作的api -->
    <module>shopping_manager_api</module>
</modules>

 4、编写配置文件 application.yml

# 端口号
server:
 port: 8001
# 日志格式
logging:
 pattern:
   console: '%d{HH:mm:ss.SSS} %clr(%-5level) --- [%-15thread] %cyan(%-50logger{50}):%msg%n'
dubbo:
   application:
   name: shopping_manager_api # 项目名
 registry:
   address: zookeeper://192.168.25.100 #注册中心地址
   port: 2181       # 注册中心的端口
   timeout: 10000 # 注册到zk上超时时间,ms
 protocol:
   name: dubbo # dubbo使用的协议
   port: -1 # dubbo自动分配端口

编写根据id查询品牌控制器

1、启动类忽略数据源自动配置

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
public class ShoppingGoodsManagerApiApplication {
    public static void main(String[] args)
   {
      
        SpringApplication.run(ShoppingGoodsManagerApiApplication.class, args);
   }
}

2、编写控制器,返回JSON数据

@RestController
@RequestMapping("/brand")
public class BrandController {
    // 远程注入
    @DubboReference
    private BrandService brandService;
    @GetMapping("/findById")
    public Brand findById(Long id){
        Brand brand = brandService.findById(id);
        return brand;
   }
}

3、启动商品API模块,访问 http://localhost:8001/brand/findById? id=1,查看数据。

配置IDEA忽略文件显示 

在IDEA项目栏中会显示很多和开发无关的文件,我们可以通过配置 隐藏这些文件:

File->Settings->Editor->File Types->Ignore Files and Folders

*.md;*.gitignore;.mvn;.idea;

 

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

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

相关文章

4.SpringWeb

一、创建项目LomBok:辅助开发工具&#xff0c;减少代码编写Spring Web:带上Spring MVC,可以做Web开发了Thymleaf: Web开发末班引擎&#xff08;不常用&#xff09;创建好&#xff0c;如下&#xff1a;static/ 放置静态资源的根目录templates/ 放置模板文件的根目录 二、资源配置…

新来的23岁软件测试员上来秀了波操作,把几个老员工看傻了

春招了&#xff0c;公司来了个小伙子&#xff0c;一看简历&#xff0c;嘿&#xff1f;22岁&#xff0c;这不刚毕业的小毛孩子嘛&#xff0c;结果没想到人家上来就把现有项目的性能优化了一遍&#xff0c;给公司节省了一半的成本&#xff0c;这种“王炸”打法&#xff0c;直接给…

152、【动态规划】leetcode ——416. 分割等和子集:滚动数组+二维数组(C++版本)

题目描述 原题链接&#xff1a;416. 分割等和子集 解题思路 题目要求是划分出两个相等的集合&#xff0c;那么这两个相等的集合相加&#xff0c;一定等于偶数并且为总集合的二分之一&#xff0c;若总集合求和后不为偶数&#xff0c;则一定不可以划分&#xff0c;直接返回fals…

黄绮珊“绮望三十”巡回演唱会3月4日广州中山纪念堂暖春开唱!

•中年成名 四十余载静待盛放歌手黄绮珊&#xff0c;1991年正式进入歌坛&#xff0c;至今已满三十周年。黄绮珊前半生的歌手之路好像并不是那么顺畅。虽然一直有着华语乐坛的顶尖歌唱实力&#xff0c;但在45岁之前&#xff0c;黄绮珊一直处于“歌红人不红”的状态。不少人听过黄…

GPU服务器安装显卡驱动、CUDA和cuDNN

GPU服务器安装cuda和cudnn1. 服务器驱动安装2. cuda安装3. cudNN安装4. 安装docker环境5. 安装nvidia-docker25.1 ubuntu系统安装5.2 centos系统安装6. 测试docker容调用GPU服务1. 服务器驱动安装 显卡驱动下载地址https://www.nvidia.cn/Download/index.aspx?langcn显卡驱动…

Zabbix 构建监控告警平台(三)

Zabbix User parametersZabbix Trigger1.Zabbix User parameters 1.1即自定义KEY 注意&#xff1a;mysql安装在被监测主机 [rootlocalhost ~]# yum -y install mariadb-server mariadb [rootlocalhost ~]# systemctl start mariadb [rootlocalhost ~]# mysqladmin -uroot statu…

[electron] 一 vue3.2+vite+electron 项目集成

一 开发环境系统&#xff1a;windows开发工具&#xff1a; git , vscode&#xff0c;termial环境依赖&#xff1a; node, npm 二 步骤2.1 通过vite 创建vue项目通过 终端执行命令&#xff0c;选择 模板 vuenpm init vite cd 项目目录 npm install npm run dev2.2 集成 electro…

T06 成绩排序

查找和排序 题目&#xff1a;输入任意&#xff08;用户&#xff0c;成绩&#xff09;序列&#xff0c;可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理。 示例&#xff1a; jack 70 peter 96 Tom 70 smith 67 从高到低 成…

LC-70-爬楼梯

原题链接&#xff1a;爬楼梯 个人解法 思路&#xff1a; 动态规划 状态表示&#xff1a;f[i]表示走到第n阶台阶有几种方法 状态转移&#xff1a;f[i] f[i -1] f[i - 2] 这实际上就是斐波那契数列&#xff0c;通过转移可以看到&#xff0c;我们只用了三个变量&#xff0c;故…

Java、JSP职工人事管理系统设计与实现

技术&#xff1a;Java、JSP等摘要&#xff1a;现在随着我们这个社会的计算机技术的快速发展&#xff0c;计算机在企业管理中得到普遍的应用&#xff0c;现在我们利用计算机在实现企业职工的管理越来越重要。当今社会是快速发展的信息社会&#xff0c;自动化信息的作用也变得越来…

Python 之 NumPy 简介和创建数组

文章目录一、NumPy 简介1. 为什么要使用 NumPy2. NumPy 数据类型3. NumPy 数组属性4. NumPy 的 ndarray 对象二、numpy.array() 创建数组1. 基础理论2. 基础操作演示3. numpy.array() 参数详解三、numpy.arange() 生成区间数组四、numpy.linspace() 创建等差数列五、numpy.logs…

第四章 Opencv图像色彩空间与通道

文章目录1.色彩空间1-1.RGB/BGR色彩空间1-2.GRAY色彩空间1-3.HSV色彩空间2.通道2-1.拆分通道&#xff1a;split()方法1.拆BGR色彩空间图像的通道2.拆HSV色彩空间图像的通道2-2.合并通道&#xff1a;merge()方法1.B、G、R 通道的合并2.H、S、V 通道的合并3.B、G、R、A 通道的合并…

M100嵌入式自动吞吐式读写器|电动读卡机如何通过C#程序读取社保卡号

M100嵌入式自动吞吐式读写器|电动读卡机是一款双保护门功能读卡器&#xff0c;第一层防尘防异物机械门&#xff0c;第二层电动门。 M100嵌入式自动吞吐式读写器|电动读卡机采用耐高温、耐磨擦、高强度、抗老化的复合型塑胶为主体&#xff0c;在走卡通道两侧镶有不锈钢金属&…

YUV数据和格式

一、YUV简介 1.YUV说明 YUV是一种颜色编码方法&#xff0c; 与RGB&#xff08;红 - 绿 - 蓝&#xff09;不同。 <1>Y表示亮度分量&#xff0c;也叫灰阶值&#xff1a;如果只显示Y&#xff0c;图片会是一张黑白照 <2>U&#xff08;Cb&#xff09;表示色度分量&…

2022年12月电子学会Python等级考试试卷(三级)答案解析

目录 一、单选题(共25题&#xff0c;共50分) 二、判断题(共10题&#xff0c;共20分) 三、编程题(共3题&#xff0c;共30分) 青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;三级&#xff09; 一、单选题(共25题&#xff0c;共50分) 1. 列表L1中全是…

你知道ChatGPT能搞钱吗?哎呦喂,不知道,那没意思

这段时间&#xff0c;热度zui大的是什么&#xff1f;答案是—— &#x1f389;&#x1f389;ChatGPT&#x1f389;&#x1f389;。去年11月底上线&#xff0c;当时仅在AI和科技圈内小火了一把&#xff0c;没想到在今年春节后&#xff0c;火爆出圈。 ChatGPT的爆火&#xff0c;对…

微信小程序nodej‘s+vue警局便民服务管理系统

本文首先介绍了设计的背景与研究目的,其次介绍系统相关技术,重点叙述了系统功能分析以及详细设计,最后总结了系统的开发心得在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括“最多跑一次”微信小程序的网络应用,在外国小程序的使用已经是很普遍的方…

java多线程开发

1.并发和并行 并发&#xff1a;同一时间段内多个任务同时进行。 并行&#xff1a;同一时间点多个任务同时进行。 2.进程线程 进程&#xff08;Process&#xff09;&#xff1a;进程是程序的一次动态执行过程&#xff0c;它经历了从代码加载、执行、到执行完毕的一个完整过程…

当资深程序员深夜去“打劫”会发生什么?——打家劫舍详解

文章目录一、前言二、概述三、打家劫舍第一晚四、打家劫舍第二晚五、打家劫舍第三晚......一、前言 大家好久不见&#xff0c;正如标题所示&#xff0c;今天我不打算聊一些枯燥的算法理论&#xff0c;我们来聊一聊程序员有多厉害&#xff01; 注意&#xff01;&#xff01;&am…

JDBC(新版)

文章目录JDBC概念优势总结JDBC核心api和使用路线涉及具体核心类和接口DriverManagerConnectionstatement、preparedstatement、callablestatementResult核心API使用步骤总结基于statement演示查询基于statement方式问题基于preparedstatement的优化基于preparedstatement的curd…