一句话定位:国内 Java 圈最有名的「电商实战教学项目」——Spring Boot 多模块单体 + Vue 3 后台 + uni-app 前台,功能完整、文档极全,但它首先是用来学架构的,不是拿来直接开店的。
项值
仓库地址https://gitee.com/macrozheng/mall (GitHub:github.com/macrozheng/mall)
官方站点https://www.macrozheng.com (mall 学习教程)
开源协议Apache-2.0,Copyright 2018-2026 macrozheng
技术栈Java 17 / Spring Boot 3.5.14 / Spring Security / MyBatis / MySQL / Redis / MongoDB / RabbitMQ / Elasticsearch
当前版本无版本号发布,pom 为 1.0-SNAPSHOT,按分支跟踪
社区热度Gitee 27,271 Star / 5,241 Fork / 1,322 Watch(接口实测 2026-10-25);官方口径称 GitHub 60K+
维护团队macrozheng(个人项目,单人维护)
仓库活跃度创建于 2019-02-16,最近推送 2026-09-15,未关闭 Issue 15 个
文档日期2026-10-25

1. 项目是什么

mall 是一套功能完整的电商系统参考实现,包含后台管理(mall-admin)、前台商城(mall-portal)、商品搜索(mall-search)三个可独立启动的服务,配 Vue 3 后台前端与 uni-app 移动端,用 Docker 容器化部署。

它和一般「开源商城」最大的区别在于定位:它的第一属性是教学项目。作者围绕它写了整套学习教程(架构篇 / 业务篇 / 部署篇 / 扩展篇)和 115 期视频课程,代码组织的首要目标是「让人看得懂、能照着搭」,而不是「让商家直接开张」。

它解决的核心问题:

  1. 缺少一个能完整学习的电商范例 —— 商品/SKU、购物车优惠计算、确认单、订单状态机、权限 RBAC、ES 搜索、延迟消息关单,这些在企业里看不到全貌的东西它都摆出来了。
  2. 不知道主流 Java 技术栈怎么串起来 —— Redis、MongoDB、RabbitMQ、Elasticsearch、MinIO、ELK、Jenkins 一次性整合在一套业务里,不是孤立的 Hello World。
  3. 毕设与面试需要一个「完整项目经验」 —— 文档全、能跑通、讲得清设计思路,这一档几乎没有更强替代品。

不适用的场景:它没有内置支付(支付宝对接只在「扩展篇」教程里讲实现思路);没有多商户、分销、拼团、风控、对账;不做秒杀级高并发压测;没有生产级监控告警与安全审计。直接拿它当生产电商系统用,是选型误判。

2. 核心特性

特性说明对使用者的价值
三服务拆分admin / portal / search 独立启动,共用 common、mbg、security 模块可按需启动,学架构时边界清晰
Elasticsearch 商品搜索关键词 + 品牌 + 分类多维度组合筛选、聚合电商搜索的标准实现范例
购物车与优惠计算优惠以商品为单位计算(非 SKU),确认单才体现优惠金额这是最容易设计错的环节,代码有注释说明取舍
RabbitMQ 延迟消息订单超时自动取消延迟队列的典型业务落地
MongoDB 文档存储商品详情等非结构化内容关系库 + 文档库混合建模示例
多对象存储阿里云 OSS + MinIO 双支持,可切换换云厂商不改业务代码
ELK 日志方案Logstash 收集 + Kibana 可视化生产日志链路的完整演示
Docker / Jenkins 部署fabric8 插件打镜像、Docker Compose、Jenkins 自动化从开发到部署的全链路可复现
教程体系免费网页教程 + 115 期视频课程(约 40 小时)学习成本被压到极低,这是它真正的护城河

3. 技术架构

整体结构:多模块单体(modular monolith),不是微服务。四个可启动的 Spring Boot 应用 —— mall-admin(后台接口)、mall-portal(前台接口)、mall-search(搜索服务)、mall-demo(框架搭建期的测试代码,可忽略)。业务层各自独立,底层共用 mall-common、mall-mbg、mall-security。

技术选型(版本取自仓库根 pom.xml,master 分支实测):

层技术版本备注
运行时Java17master 分支要求
框架Spring Boot3.5.14starter-parent 版本
安全Spring Security + JWT随 Boot认证授权 + 动态权限
持久MyBatis + PageHelper3.5.19 / 6.1.1starter 3.0.4
代码生成MyBatis Generator1.4.2生成 mall-mbg 下的实体与 Mapper
文档SpringDoc OpenAPI2.8.17已从 Swagger-UI 换到 springdoc
连接池Druid1.2.24boot-3-starter
工具Hutool5.8.40all 包
数据库MySQL Connector/J9.3.0环境说明写 MySQL 5.7
缓存Redis7.0(环境)会话、缓存、防重复提交
文档库MongoDB5.0(环境)商品详情
消息RabbitMQ3.10.5(环境)延迟消息关单
搜索Elasticsearch7.17.3(环境)plus Logstash / Kibana 同版本
存储阿里云 OSS / MinIO3.18.5 / 8.6.0双实现
支付alipay-sdk4.40.630.ALL仅扩展篇教程使用
容器fabric8 docker-maven-plugin0.45.1基础镜像 openjdk:17

关键取舍:选择「多模块单体 + 中间件全家桶」而非微服务,是为了让一个学习者在一台机器上跑通全链路;代价是环境依赖极重(六个中间件起步)。mall-security 独立成模块、mall-mbg 用代码生成器产出、mall-demo 保留在仓库里,都是教学优先的痕迹 —— 这不是缺点,但你得知道自己在用什么。

4. 目录结构

mall
├── mall-common      工具类与通用代码(返回体、异常、Redis 配置等)
├── mall-mbg         MyBatis Generator 生成的数据库操作代码(实体 + Mapper)
├── mall-security     Spring Security + JWT 封装,供 admin / portal 复用
├── mall-admin        后台管理系统接口(商品、订单、营销、权限、内容、报表)
├── mall-search       基于 Elasticsearch 的商品搜索服务
├── mall-portal       前台商城系统接口(门户、购物车、下单、会员中心)
├── mall-demo         框架搭建期的测试与示例代码
├── document          架构图、功能结构图、SQL 等文档资源
└── pom.xml           Spring Boot 3.5.14 parent,全模块依赖管理
目录 / 文件备注
document/内含数据库脚本与各类功能结构图(商品/订单/促销/内容/用户/前台)
mall-mbg不要手改,由 MyBatis Generator 重新生成会覆盖
mall-demo学习时可参考写法,生产部署无需启动
前端仓库mall-admin-web(Vue 3 + Element Plus)、mall-app-web(uni-app),独立仓库不在本仓库内

5. 快速上手

环境硬门槛(官方给出的版本组合,照抄最省事):

组件版本备注
JDK17master 分支;老分支 dev-v2 是 JDK 8
MySQL5.7装 8.x 也能跑,注意时区与字符集
Redis7.0必需
MongoDB5.0前台商城与商品详情需要
RabbitMQ3.10.5延迟消息关单需要
Nginx1.22前端静态资源与反向代理
Elasticsearch7.17.3搜索服务必需
Logstash / Kibana7.17.3ELK 日志,可选
重要提示:只启动 mall-admin 的话,只需 MySQL + Redis。学习和二次开发从这一步切入,别一上来就装六个中间件。

方式 A:本地开发运行

# 1. 克隆(后端)
git clone https://gitee.com/macrozheng/mall.git

# 2. 导入 IDEA,等 Maven 依赖下载完成
# 3. 建库并导入 document 目录下的 SQL 脚本
# 4. 改各模块 application.yml:数据库、Redis、MongoDB、RabbitMQ、ES 连接信息
# 5. 按需启动
#    mall-admin    → 后台管理接口
#    mall-portal   → 前台商城接口
#    mall-search   → 商品搜索(需先启动 ES)

# 6. 克隆并部署前端
git clone https://gitee.com/macrozheng/mall-admin-web.git
# 安装依赖、改接口地址、npm run dev

方式 B:Docker 部署

# 中间件按文档逐个起,或用 Docker Compose 一次性拉起
# 后端镜像构建走 pom 里的 fabric8 docker-maven-plugin
# 注意:需先修改 pom.xml 中的 docker.host(默认是作者内网地址,见第 11 节)
mvn clean package -DskipTests
# 前端构建产物交给 Nginx 托管

启动失败高频原因:Redis 没起(登录直接失败);ES 版本与代码里的客户端不匹配(7.17.x 才对应当前代码);MongoDB 未启动导致前台商品详情 500;docker.host 未改导致镜像构建连不上 Docker;JDK 用了 8 跑 master 分支(编译直接报错)。

6. 功能模块清单

端模块主要能力备注
后台商品管理商品列表、添加(信息/促销/属性/关联四步)、分类、类型、品牌、SKU 库存核心模块,SKU 建模是重点
后台订单管理订单列表、订单设置、退货申请处理、退货原因设置含订单状态流转
后台营销管理秒杀活动、优惠券(全场/分类/商品券)、品牌推荐、新品推荐、人气推荐、专题推荐、广告列表营销配置项齐全
后台权限管理用户、角色、菜单、资源,RBAC 模型 + 动态权限Spring Security + JWT
后台内容管理专题、广告位等运营内容内容侧偏轻
后台会员管理会员列表与等级标签、积分在业务篇讲
后台统计报表今日订单/销售额、待处理事务、商品与用户概览、订单统计图表用 v-charts
后台财务管理财务相关列表轻量,非完整对账体系
后台设置系统基础配置—
前台首页门户轮播、推荐、分类入口uni-app 实现
前台商品搜索ES 关键词 + 品牌 + 分类筛选排序独立 mall-search 服务
前台购物车加购、改量、勾选、优惠计算优惠在确认单体现
前台订单流程确认单、下单、支付回调、取消支付需自行对接
前台会员中心登录注册、地址、订单、收藏—
前台客户服务 / 帮助中心静态与工单式页面内容型

7. 版本与授权

版本跟踪方式:项目不发布 Release 版本号,靠分支区分。

分支技术栈适用人群备注
masterSpring Boot 3.5.14 + JDK 17新项目、新学习者当前默认分支,pom 实测
dev-v2Spring Boot 2.7 + JDK 8老环境、公司还在 JDK 8 的按 Gitee README 口径
mall-swarmSpring Cloud Alibaba + Spring Boot 3.5 + Sa-Token + K8s想学微服务的独立仓库,非本仓库分支

协议要点

  • Apache-2.0:可商用、可闭源分发、可改可卖,只需保留版权与许可声明。
  • 没有商业版、没有授权费、没有功能阉割。它的全部源码就是全部能力,这点在国内同类项目里相当少见。
  • 无「禁止商用」条款、无「必须保留 Logo」要求、无二次授权限制。

8. 商业模式说明

这是本篇最值得说清的一节:mall 是「知识型开源」的典型样本 —— 代码全免费,收费的是「怎么学」。

收入层产品怎么赚钱定位
① 免费开源mall、mall-swarm、mall-admin-web、mall-app-web、mall-tiny、mall-learning、springcloud-learning不收一分钱,Apache-2.0 全开放流量入口与个人品牌
② 免费内容官网《mall 学习教程》:架构篇 / 业务篇 / 部署篇 / 扩展篇,全部网页可读免费,靠 SEO 与口碑获客转化漏斗的中间层
③ 付费课程《mall 视频教程》115 期、约 40 小时,在知识星球内提供(部分集数 B 站可试看);另有 cloud.macrozheng.com 的 mall-swarm 微服务教程知识星球付费会员主要变现方式
④ 私域运营公众号「macrozheng」+ 微信群流量沉淀、课程复购、广告长期资产
⑤ 技术影响力27K Gitee Star、60K+ GitHub 口径带来出书、演讲、内推、咨询机会隐性收益

几个要点

  • 不做 SaaS、不卖源码、不接定制。对比 MCMS(公司卖四档授权)和微同商城(卖商业版源码),mall 走的是完全第三条路:用免费代码换影响力,用影响力卖课程。
  • 这套模式成立的前提是「项目本身足够好、足够完整、足够有学习价值」—— 代码质量就是产品力,一旦变成「能用就行」,课程就没人买。这解释了为什么它的文档和注释质量在同类项目里明显高一档。
  • 对使用者意味着什么:代码零成本,时间成本自负。你不需要为授权付钱,但如果想省掉「自己啃代码」的时间,付费课程就是那个商品。反过来说,只看网页教程 + 读代码,也完全够把项目跑通并二次开发 —— 没有功能锁。
  • 单人维护是这套模式的必然结果,也是它最大的结构风险(见第 11 节)。

9. 生态与周边

类型名称 / 地址说明
后端主项目gitee.com/macrozheng/mall本仓库,多模块单体
微服务版gitee.com/macrozheng/mall-swarmSpring Cloud Alibaba 版,约 13.2K Star
后台前端gitee.com/macrozheng/mall-admin-webVue 3 + Element Plus
移动端前台gitee.com/macrozheng/mall-app-webuni-app,一套代码多端
精简脚手架gitee.com/macrozheng/mall-tinySpring Boot + MyBatis-Plus,带完整权限,开箱即用
教程示例代码gitee.com/macrozheng/mall-learning教程配套源码
Spring Cloud 教程gitee.com/macrozheng/springcloud-learning微服务组件学习项目
学习教程站www.macrozheng.com免费网页教程 + 课程入口
微服务教程站cloud.macrozheng.commall-swarm 专项教程
在线演示www.macrozheng.com/admin/index.html · /app/后台与移动端(H5)演示
交流渠道公众号「macrozheng」回复「加群」微信群,非 Issues 为主

扩展方式三条路:① 在 mall-* 业务模块加 Service/Controller,按现有分层照写;② 用 MyBatis Generator 加表再生成 mall-mbg;③ 换前端(mall-admin-web 或 mall-app-web 整套替换),后端接口不用动。

10. 选型建议

强烈建议用

  • Java 学习者与面试准备者 —— 想讲清「电商系统怎么设计」,这一套的教程密度几乎无对手。
  • 毕设、课程设计 —— 模块全、文档全、演示站能看效果。
  • 企业内部技术培训与脚手架参考 —— 拿来当规范样板,比自研一套教学材料便宜得多。

可以试试

  • 企业内部系统或小电商 MVP:功能骨架够用,但支付、物流、对账、风控要自己补,别低估这部分工作量。
  • 想学微服务的团队:直接上 mall-swarm,别在单体上硬改。

不建议用

  • 直接当生产电商系统上线 —— 无支付、无风控、无多商户、无压测与监控体系,教学定位决定了它不做这些。
  • 需要开箱即用商用商城的商家 —— 转微同商城商业版、CRMEB、likeshop 这类有商业支持的。
  • 追求自动化测试与 CI 质量门禁的团队 —— 根 pom 全局 skipTests=true,项目基本没有自动化测试兜底。

同类对比

维度mallmall-swarm微同商城newbee-mall
定位教学实战(单体)教学实战(微服务)可商用商城轻量教学商城
后端Spring Boot 3.5 / JDK 17Spring Cloud Alibaba + Boot 3.5Spring Boot 3.2.5 / JDK 21Spring Boot
前端Vue 3 后台 + uni-app 前台Vue 后台Vue 2 后台 + 小程序Vue 后台
中间件依赖6 个以上更多(注册/配置中心等)MySQL + Redis 为主MySQL + Redis
支付无(教程讲思路)无微信支付已接通无
商用就绪度低低中低
社区规模27.3K(Gitee)13.2K27.7K(Gitee)11.7K

11. 风险与坑

定位层(最需要提前认清的一条)

  • 它没有内置支付。README 承诺「完整订单流程」,但支付成功回调、渠道对接属于「扩展篇教程」内容,代码里没有可用的生产级支付实现。任何「拿它开店」的计划都必须先算这块成本。
  • 没有多商户、分销、拼团、秒杀防超卖方案(营销模块只是配置层面)、没有对账与风控。教学项目不做这些是合理的,但选型时要清楚。

环境与工程层

  • 中间件太多(MySQL / Redis / MongoDB / RabbitMQ / ES / ELK / MinIO),新手一上来全装容易卡死在环境上。先只跑 mall-admin + MySQL + Redis。
  • 根 pom.xml 里 docker.host 写死为 http://192.168.3.101:2375 —— 这是作者本机地址。用 docker-maven-plugin 构建镜像前必须改成自己的 Docker 地址,否则连不上。顺带提醒:2375 端口明文无 TLS 暴露在大网上是高危配置,不要照抄到生产机。
  • 根 pom 全局 skipTests=true,并且仓库几乎没有自动化测试。二次开发改动后没有回归网,只能靠手工验证。
  • mall-mbg 是生成代码,手改会被下次生成覆盖,业务扩展要写在 mall-* 模块里。

版本与信息一致性层

  • 分支说明三处口径不一致:Gitee README 说 master = Spring Boot 3.5 + JDK 17、dev-v2 = 2.7 + JDK 8;GitHub 镜像 README 仍写 master = 2.7 + JDK 8、dev-v3 = 3.2 + JDK 17。以仓库 pom.xml 为准(实测 3.5.14 / Java 17),GitHub 那份说明已滞后。
  • README 技术选型表里前端写「Vue + Element」,但 mall-admin-web 实际已是 Vue 3 + Element Plus。别按 README 的表去判断前端版本。
  • 环境表写 MySQL 5.7,但驱动是 mysql-connector-j 9.3.0。装 MySQL 8.x 反而更匹配,5.7 属于历史遗留说明。
  • 视频教程里的技术栈版本(如 Spring Boot 3.2.2、Druid 1.2.21)已经落后于当前 master,跟着视频搭环境会出现版本对不上的情况,以 pom 为准。

维护层

  • 单人维护(bus factor = 1)。这不是团队项目,作者个人节奏直接决定项目生死;最近一次推送 2026-09-15,仍在维护但频率不算高。
  • 无 CI、无自动化测试、无正式 Release 版本号,只有分支。生产使用要自己建质量体系。

生产落地 checklist

序号检查项备注
1支付链路自建微信/支付宝下单、回调、退款、对账全部要自己写,别指望仓库
2docker.host 已改默认是作者内网 IP,不改无法构建镜像
3Docker 2375 不裸奔生产必须加 TLS 或只走本地 socket,作者配置仅适合个人开发机
4自动化测试补齐根 pom skipTests=true,上线前必须自建回归用例
5中间件高可用方案Redis 集群、ES 集群、RabbitMQ 镜像队列都要另行设计
6监控与告警项目只有 actuator 端点,需接 Prometheus 或云监控
7静态资源与上传OSS 或 MinIO 二选一,且要配好跨域与防盗链
8版本锁定无 Release 号,需自己 tag 一个 commit 作为基线,避免跟随时被改动打断

12. 参考链接

类型链接
源码仓库(Gitee)https://gitee.com/macrozheng/mall
源码仓库(GitHub)https://github.com/macrozheng/mall
学习教程站https://www.macrozheng.com
后台演示https://www.macrozheng.com/admin/index.html
前台演示(H5)https://www.macrozheng.com/app/
微服务版https://gitee.com/macrozheng/mall-swarm
微服务教程站https://cloud.macrozheng.com
后台前端https://gitee.com/macrozheng/mall-admin-web
移动端前台https://gitee.com/macrozheng/mall-app-web
精简脚手架https://gitee.com/macrozheng/mall-tiny
教程示例代码https://gitee.com/macrozheng/mall-learning
Spring Cloud 教程https://gitee.com/macrozheng/springcloud-learning

标签: 电商, mall

添加新评论