Mall项目详细分析文档

Mall 商城系统详细分析文档

文档信息

项目 内容
项目名称 Mall(商城)
项目版本 1.0.0-SNAPSHOT
项目类型 B2C 电商平台(前台商城 + 后台管理系统)
技术架构 Spring Boot + MyBatis + Thymeleaf + MySQL
文档版本 v1.0
生成日期 2026-07-02

目录


一、项目概述

1.1 项目简介

Mall(商城)是一个基于 Java 技术栈开发的 B2C 电商平台项目,采用经典的 MVC 三层架构和服务端渲染(SSR)模式。项目同时包含前台商城系统后台管理系统两大子系统,覆盖了电商平台的核心业务流程。

1.2 项目定位

  • 学习型项目:适合 Java 初学者学习 Spring Boot + MyBatis 全栈开发
  • 功能完整:覆盖商品、购物车、订单、支付、用户等核心电商模块
  • 代码规范:包结构清晰,命名规范,易于理解和扩展

1.3 项目目录结构

复制代码
newbee-mall-master/
├── src/
│   └── main/
│       ├── java/ltd/newbee/mall/
│       │   ├── NewBeeMallApplication.java     # 启动类
│       │   ├── common/                         # 公共模块(常量、枚举、异常)
│       │   ├── config/                         # 配置类
│       │   ├── controller/                     # 控制层
│       │   │   ├── admin/                      # 后台管理控制器
│       │   │   ├── mall/                       # 前台商城控制器
│       │   │   ├── common/                     # 公共控制器
│       │   │   └── vo/                         # 视图对象
│       │   ├── dao/                            # 数据访问层(Mapper接口)
│       │   ├── entity/                         # 实体类
│       │   ├── interceptor/                    # 拦截器
│       │   ├── service/                        # 业务逻辑层
│       │   │   └── impl/                       # 实现类
│       │   └── util/                           # 工具类
│       └── resources/
│           ├── mapper/                         # MyBatis XML映射文件
│           ├── static/                         # 静态资源
│           │   ├── admin/                      # 后台静态资源
│           │   └── mall/                       # 前台静态资源
│           ├── templates/                      # Thymeleaf模板
│           │   ├── admin/                      # 后台页面模板
│           │   ├── mall/                       # 前台页面模板
│           │   └── error/                      # 错误页面
│           ├── upload/                         # 上传文件目录
│           ├── application.properties          # 应用配置
│           └── newbee_mall_schema.sql          # 数据库脚本
├── pom.xml                                      # Maven配置
└── README.md                                    # 项目说明

二、技术栈详解

2.1 后端技术栈

2.1.1 核心框架
技术/框架 版本 用途 引入位置
Spring Boot 2.3.7.RELEASE 核心应用框架,提供自动配置、内嵌容器等 pom.xml#L13-L18(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/pom.xml#L13-L18)
Spring MVC - Web 层框架,处理 HTTP 请求响应 随 Spring Boot 自动引入
MyBatis 2.1.3 ORM 持久层框架,SQL 映射 pom.xml#L39-L43(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/pom.xml#L39-L43)
Spring Session - Session 管理 pom.xml#L35-L38(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/pom.xml#L35-L38)
2.1.2 模板引擎
技术/框架 版本 用途 说明
Thymeleaf - 服务端模板引擎 天然的 HTML 模板,支持 Spring EL 表达式
2.1.3 数据库相关
技术/框架 用途 配置位置
MySQL 关系型数据库 application.properties#L4-L16(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/resources/application.properties#L4-L16)
HikariCP 数据库连接池 Spring Boot 默认连接池
MyBatis Mapper XML SQL 映射文件 src/main/resources/mapper/ 目录
2.1.4 其他依赖
技术/框架 版本 用途
Easy-Captcha 1.6.2 图形验证码生成
Spring Boot Test - 单元测试支持

2.2 前端技术栈

2.2.1 前台商城
技术/库 用途 位置
jQuery 1.8.0 DOM 操作和 AJAX 请求 static/mall/js/jquery-1.8.0.js
Bootstrap 3 响应式布局框架 static/mall/js/bootstrap3.js
Swiper 轮播图组件 static/mall/js/swiper-bundle.min.js
2.2.2 后台管理
技术/库 用途
jQuery DOM 操作和 AJAX 请求
Bootstrap 响应式布局
jqGrid 数据表格组件
Select2 下拉选择组件
wangEditor 富文本编辑器
SweetAlert 弹窗提示组件
ajaxupload 文件上传组件

2.3 开发环境配置

properties 复制代码
# 服务端口
server.port=28089

# 数据库配置
spring.datasource.name=mall_db
spring.datasource.url=jdbc:mysql://localhost:3306/mall_db
spring.datasource.username=yuan
spring.datasource.password=yuan

# 连接池配置(HikariCP)
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=15
spring.datasource.hikari.connection-timeout=30000

# MyBatis 配置
mybatis.mapper-locations=classpath:mapper/*Mapper.xml

# 模板引擎配置
spring.thymeleaf.cache=false  # 开发环境关闭缓存

三、项目架构设计

3.1 整体架构模式

项目采用经典的 MVC 三层架构 + 前后端不分离(服务端渲染)模式:

复制代码
┌─────────────────────────────────────────────────────────┐
│                     浏览器 (客户端)                      │
│         (HTML + CSS + JavaScript + jQuery)              │
└───────────────────────────┬─────────────────────────────┘
                            │ HTTP 请求/响应
                            │ (HTML页面 / JSON数据)
┌───────────────────────────▼─────────────────────────────┐
│                    Controller 控制层                      │
│  (接收请求、参数校验、调用Service、返回视图/JSON)        │
│  - admin/  后台管理控制器 (7个)                          │
│  - mall/   前台商城控制器 (5个)                          │
│  - common/ 公共控制器 (3个)                             │
└───────────────────────────┬─────────────────────────────┘
                            │ 方法调用
┌───────────────────────────▼─────────────────────────────┐
│                    Service 业务逻辑层                     │
│  (业务处理、事务管理、调用DAO、数据转换)                 │
│  - 8个Service接口 + 8个实现类                           │
│  - @Transactional 事务管理                              │
└───────────────────────────┬─────────────────────────────┘
                            │ 方法调用
┌───────────────────────────▼─────────────────────────────┐
│                   DAO / Mapper 数据访问层                 │
│  (MyBatis接口 + XML映射、SQL操作)                       │
│  - 9个Mapper接口                                        │
│  - 9个XML映射文件                                       │
└───────────────────────────┬─────────────────────────────┘
                            │ JDBC
┌───────────────────────────▼─────────────────────────────┐
│                     MySQL 数据库                          │
│  (9张核心业务表)                                         │
└─────────────────────────────────────────────────────────┘

3.2 分层设计原则

3.2.1 控制层 (Controller)
  • 职责:接收 HTTP 请求,参数校验,调用 Service 层,返回视图或 JSON
  • 返回类型:页面跳转(String)或 JSON 数据(@ResponseBody)
  • 数据传递:通过 HttpServletRequest / Model / @RequestBody 传参
3.2.2 业务层 (Service)
  • 职责:核心业务逻辑处理,事务控制,数据组装转换
  • 事务管理 :使用 @Transactional 注解声明式事务
  • 返回结果:状态码字符串或业务对象
3.2.3 数据访问层 (DAO/Mapper)
  • 职责:数据库 CRUD 操作
  • 实现方式:MyBatis 接口 + XML 映射文件
  • 参数传递:单个参数、对象、Map、List 等

3.3 核心设计模式

设计模式 应用场景
MVC 模式 整体架构分层
工厂模式 Spring Bean 管理
代理模式 事务管理(AOP)
模板方法 MyBatis SQL 模板
值对象模式 VO / DTO 数据传输
单例模式 Spring Bean 默认作用域

四、数据库设计详解

4.1 数据表总览

项目共包含 9 张核心数据表 ,表名统一前缀为 tb_newbee_mall_

序号 表名 用途 记录数 核心字段数
1 tb_newbee_mall_admin_user 管理员用户表 3 5
2 tb_newbee_mall_carousel 首页轮播图表 2 10
3 tb_newbee_mall_goods_category 商品分类表 ~92 10
4 tb_newbee_mall_goods_info 商品信息表 ~100+ 16
5 tb_newbee_mall_index_config 首页配置表 24 10
6 tb_newbee_mall_order 订单主表 20 16
7 tb_newbee_mall_order_item 订单明细表 34 8
8 tb_newbee_mall_shopping_cart_item 购物车表 - 7
9 tb_newbee_mall_user 前台用户表 8 9

SQL 文件位置:newbee_mall_schema.sql(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/resources/newbee_mall_schema.sql)

4.2 核心表结构详解

4.2.1 管理员用户表 (tb_newbee_mall_admin_user)
字段名 类型 约束 说明
admin_user_id int(11) PK, AUTO_INCREMENT 管理员ID
login_user_name varchar(50) NOT NULL 登录名
login_password varchar(50) NOT NULL 登录密码(MD5)
nick_name varchar(50) NOT NULL 显示昵称
locked tinyint(4) DEFAULT 0 是否锁定:0-未锁定 1-已锁定

默认账号:admin / 123456(密码MD5:e10adc3949ba59abbe56e057f20f883e)

4.2.2 商品分类表 (tb_newbee_mall_goods_category)
字段名 类型 约束 说明
category_id bigint(20) PK, AUTO_INCREMENT 分类ID
category_level tinyint(4) DEFAULT 0 分类级别:1-一级 2-二级 3-三级
parent_id bigint(20) DEFAULT 0 父分类ID
category_name varchar(50) NOT NULL 分类名称
category_rank int(11) DEFAULT 0 排序值(越大越靠前)
is_deleted tinyint(4) DEFAULT 0 逻辑删除标识
create_time datetime DEFAULT CURRENT_TIMESTAMP 创建时间
create_user int(11) DEFAULT 0 创建者ID
update_time datetime DEFAULT CURRENT_TIMESTAMP 修改时间
update_user int(11) DEFAULT 0 修改者ID

分类层级示例

复制代码
一级分类:家电 数码 手机
  ├── 二级分类:家电
  │     ├── 三级分类:生活电器
  │     ├── 三级分类:厨房电器
  │     └── ...
  ├── 二级分类:数码
  │     ├── 三级分类:平板电脑
  │     ├── 三级分类:数码相机
  │     └── ...
  └── 二级分类:手机
        ├── 三级分类:华为手机
        ├── 三级分类:iPhone
        └── ...
4.2.3 商品信息表 (tb_newbee_mall_goods_info)
字段名 类型 约束 说明
goods_id bigint(20) PK, AUTO_INCREMENT 商品ID
goods_name varchar(200) NOT NULL 商品名称
goods_intro varchar(200) NOT NULL 商品简介
goods_category_id bigint(20) NOT NULL 关联三级分类ID
goods_cover_img varchar(200) NOT NULL 商品主图URL
goods_carousel varchar(500) NOT NULL 商品轮播图(逗号分隔)
goods_detail_content text NOT NULL 商品详情(HTML)
original_price int(11) DEFAULT 1 原价(分)
selling_price int(11) DEFAULT 1 售价(分)
stock_num int(11) DEFAULT 0 库存数量
tag varchar(20) DEFAULT '' 商品标签
goods_sell_status tinyint(4) DEFAULT 0 上架状态:0-下架 1-上架
create_user int(11) DEFAULT 0 添加者ID
create_time datetime DEFAULT CURRENT_TIMESTAMP 添加时间
update_user int(11) DEFAULT 0 修改者ID
update_time datetime DEFAULT CURRENT_TIMESTAMP 修改时间

设计要点

  • 价格以为单位存储(int类型),避免浮点数精度问题
  • 商品分类只关联三级分类,确保分类粒度最细
  • 轮播图使用逗号分隔的字符串存储多张图片URL
4.2.4 订单主表 (tb_newbee_mall_order)
字段名 类型 约束 说明
order_id bigint(20) PK, AUTO_INCREMENT 订单ID
order_no varchar(20) NOT NULL 订单号(唯一)
user_id bigint(20) NOT NULL 用户ID
total_price int(11) DEFAULT 1 订单总价(分)
pay_status tinyint(4) DEFAULT 0 支付状态:0-未支付 1-支付成功 -1-支付失败
pay_type tinyint(4) DEFAULT 0 支付类型:0-无 1-支付宝 2-微信
pay_time datetime NULL 支付时间
order_status tinyint(4) DEFAULT 0 订单状态(详见6.2节)
extra_info varchar(100) DEFAULT '' 订单附加信息
user_name varchar(30) NOT NULL 收货人姓名
user_phone varchar(11) NOT NULL 收货人手机号
user_address varchar(100) NOT NULL 收货地址
is_deleted tinyint(4) DEFAULT 0 逻辑删除
create_time datetime DEFAULT CURRENT_TIMESTAMP 创建时间
update_time datetime DEFAULT CURRENT_TIMESTAMP 修改时间
4.2.5 订单明细表 (tb_newbee_mall_order_item)
字段名 类型 约束 说明
order_item_id bigint(20) PK, AUTO_INCREMENT 订单项ID
order_id bigint(20) NOT NULL 关联订单ID
goods_id bigint(20) NOT NULL 关联商品ID
goods_name varchar(200) NOT NULL 下单时商品名称(快照)
goods_cover_img varchar(200) NOT NULL 下单时商品主图(快照)
selling_price int(11) DEFAULT 1 下单时商品价格(快照)
goods_count int(11) DEFAULT 1 购买数量
create_time datetime DEFAULT CURRENT_TIMESTAMP 创建时间

设计要点(订单快照模式)

订单明细表保存下单时的商品信息快照,而非仅保存商品ID。这样即使后续商品信息发生变化(如改价、下架),历史订单数据仍能准确反映下单时的真实情况。

4.2.6 购物车表 (tb_newbee_mall_shopping_cart_item)
字段名 类型 约束 说明
cart_item_id bigint(20) PK, AUTO_INCREMENT 购物项ID
user_id bigint(20) NOT NULL 用户ID
goods_id bigint(20) DEFAULT 0 关联商品ID
goods_count int(11) DEFAULT 1 商品数量(最大5)
is_deleted tinyint(4) DEFAULT 0 逻辑删除
create_time datetime DEFAULT CURRENT_TIMESTAMP 创建时间
update_time datetime DEFAULT CURRENT_TIMESTAMP 修改时间
4.2.7 前台用户表 (tb_newbee_mall_user)
字段名 类型 约束 说明
user_id bigint(20) PK, AUTO_INCREMENT 用户ID
nick_name varchar(50) NOT NULL 用户昵称
login_name varchar(11) NOT NULL 登录名(手机号)
password_md5 varchar(32) NOT NULL MD5加密密码
introduce_sign varchar(100) NOT NULL 个性签名
address varchar(100) NOT NULL 收货地址
is_deleted tinyint(4) DEFAULT 0 注销标识
locked_flag tinyint(4) DEFAULT 0 锁定标识
create_time datetime DEFAULT CURRENT_TIMESTAMP 注册时间

4.3 表关系图

复制代码
                           ┌──────────────────┐
                           │   管理员用户表    │
                           │ tb_newbee_mall   │
                           │  _admin_user     │
                           └────────┬─────────┘
                                    │ 操作
                                    ▼
┌──────────────┐      ┌──────────────────────┐      ┌──────────────┐
│   首页配置表  │      │     商品信息表        │      │  首页轮播图  │
│  index_config│◄─────┤ tb_newbee_mall_goods  ├─────►│  carousel    │
└──────────────┘      │     _info             │      └──────────────┘
                       └──────────┬───────────┘
                                  │ 关联
                                  ▼
                       ┌──────────────────────┐
                       │     商品分类表        │
                       │  goods_category      │
                       │   (三级分类树)        │
                       └──────────────────────┘

┌──────────────┐      ┌──────────────────────┐      ┌──────────────┐
│  前台用户表   │      │      订单主表         │      │  订单明细表   │
│  mall_user   ├─────►│ tb_newbee_mall_order  ├─────►│  order_item  │
└──────┬───────┘      └──────────────────────┘      └──────┬───────┘
       │                                                  │
       │           ┌──────────────────────┐               │
       └──────────►│     购物车表          │◄──────────────┘
                   │ shopping_cart_item   │
                   └──────────────────────┘

4.4 数据库设计特点总结

特点 说明 涉及表
逻辑删除 使用 is_deleted 字段标记删除,不物理删除数据 所有业务表
时间审计 每张表都有 create_timeupdate_time 所有业务表
订单快照 订单明细保存商品快照,保证历史数据准确性 order_item
三级分类 商品分类支持三级层级结构 goods_category
分存储价格 价格以分为单位(int),避免浮点误差 goods, order
排序字段 使用 rank 字段自定义排序顺序 carousel, category, index_config

五、后端代码架构详解

5.1 代码包结构

复制代码
ltd.newbee.mall/
│
├── NewBeeMallApplication.java          # Spring Boot 启动类
│                                        # @SpringBootApplication
│                                        # @MapperScan("ltd.newbee.mall.dao")
│
├── common/                              # 公共模块
│   ├── Constants.java                   # 常量定义
│   ├── ServiceResultEnum.java           # 业务结果枚举(23种)
│   ├── PayStatusEnum.java               # 支付状态枚举
│   ├── PayTypeEnum.java                  # 支付类型枚举
│   ├── NewBeeMallOrderStatusEnum.java   # 订单状态枚举(8种)
│   ├── IndexConfigTypeEnum.java         # 首页配置类型枚举(5种)
│   ├── NewBeeMallCategoryLevelEnum.java # 分类级别枚举(3种)
│   └── NewBeeMallException.java         # 自定义业务异常
│
├── config/
│   └── NeeBeeMallWebMvcConfigurer.java  # Web MVC 配置
│                                        # - 3个拦截器注册
│                                        # - 静态资源映射
│
├── controller/                          # 控制层(15个控制器)
│   ├── admin/                           # 后台管理(7个)
│   │   ├── AdminController.java         # 管理员登录/个人信息
│   │   ├── NewBeeMallCarouselController.java    # 轮播图管理
│   │   ├── NewBeeMallGoodsCategoryController.java # 分类管理
│   │   ├── NewBeeMallGoodsController.java       # 商品管理
│   │   ├── NewBeeMallGoodsIndexConfigController.java # 首页配置
│   │   ├── NewBeeMallOrderController.java       # 订单管理
│   │   └── NewBeeMallUserController.java        # 用户管理
│   ├── mall/                            # 前台商城(5个)
│   │   ├── IndexController.java         # 首页
│   │   ├── GoodsController.java         # 商品搜索/详情
│   │   ├── ShoppingCartController.java  # 购物车
│   │   ├── OrderController.java         # 订单/支付
│   │   └── PersonalController.java      # 个人中心
│   ├── common/                          # 公共(3个)
│   │   ├── CommonController.java        # 验证码
│   │   ├── ErrorPageController.java     # 错误页面
│   │   ├── NewBeeMallExceptionHandler.java # 全局异常处理
│   │   └── UploadController.java        # 文件上传
│   └── vo/                              # 视图对象(13个VO)
│
├── dao/                                 # 数据访问层(9个Mapper)
│   ├── AdminUserMapper.java
│   ├── CarouselMapper.java
│   ├── GoodsCategoryMapper.java
│   ├── IndexConfigMapper.java
│   ├── MallUserMapper.java
│   ├── NewBeeMallGoodsMapper.java
│   ├── NewBeeMallOrderMapper.java
│   ├── NewBeeMallOrderItemMapper.java
│   └── NewBeeMallShoppingCartItemMapper.java
│
├── entity/                              # 实体类(10个)
│   ├── AdminUser.java
│   ├── Carousel.java
│   ├── GoodsCategory.java
│   ├── IndexConfig.java
│   ├── MallUser.java
│   ├── NewBeeMallGoods.java
│   ├── NewBeeMallOrder.java
│   ├── NewBeeMallOrderItem.java
│   ├── NewBeeMallShoppingCartItem.java
│   └── StockNumDTO.java                 # 库存更新DTO
│
├── interceptor/                         # 拦截器(3个)
│   ├── AdminLoginInterceptor.java       # 后台登录拦截
│   ├── NewBeeMallLoginInterceptor.java  # 前台登录拦截
│   └── NewBeeMallCartNumberInterceptor.java # 购物车数量拦截
│
├── service/                             # 业务逻辑层
│   ├── AdminUserService.java            # 8个Service接口
│   ├── NewBeeMallCarouselService.java
│   ├── NewBeeMallCategoryService.java
│   ├── NewBeeMallGoodsService.java
│   ├── NewBeeMallIndexConfigService.java
│   ├── NewBeeMallOrderService.java
│   ├── NewBeeMallShoppingCartService.java
│   ├── NewBeeMallUserService.java
│   └── impl/                            # 8个实现类
│
└── util/                                # 工具类(11个)
    ├── BeanUtil.java                    # Bean属性拷贝
    ├── JsonUtil.java                    # JSON工具
    ├── MD5Util.java                     # MD5加密
    ├── NewBeeMallUtils.java             # 商城工具
    ├── NumberUtil.java                  # 数字/订单号工具
    ├── PageQueryUtil.java               # 分页查询参数
    ├── PageResult.java                  # 分页返回结果
    ├── PatternUtil.java                 # 正则工具
    ├── Result.java                      # 统一响应结果
    ├── ResultGenerator.java             # 响应结果生成器
    └── SystemUtil.java                  # 系统工具

5.2 启动类详解

文件位置NewBeeMallApplication.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/NewBeeMallApplication.java)

java 复制代码
@MapperScan("ltd.newbee.mall.dao")  // 扫描Mapper接口
@SpringBootApplication               // Spring Boot 核心注解
public class NewBeeMallApplication {
    public static void main(String[] args) {
        SpringApplication.run(NewBeeMallApplication.class, args);
    }
}

5.3 Web MVC 配置详解

文件位置NeeBeeMallWebMvcConfigurer.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/config/NeeBeeMallWebMvcConfigurer.java)

5.3.1 拦截器配置
拦截器 拦截路径 排除路径 功能
AdminLoginInterceptor /admin/** /admin/login + 静态资源 后台登录验证
NewBeeMallCartNumberInterceptor 全站(除/admin、登录注册) - 全局购物车数量
NewBeeMallLoginInterceptor 购物车、订单、个人中心等 登录注册页 前台登录验证
5.3.2 静态资源映射
java 复制代码
registry.addResourceHandler("/upload/**", "/goods-img/**")
        .addResourceLocations(Constants.FILE_UPLOAD_URI);

/upload/**/goods-img/** 路径映射到文件上传目录。

5.4 常量定义详解

文件位置Constants.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/common/Constants.java)

常量名 说明
INDEX_CAROUSEL_NUMBER 5 首页轮播图数量
INDEX_CATEGORY_NUMBER 10 首页一级分类数量
SEARCH_CATEGORY_NUMBER 8 搜索页分类数量
INDEX_GOODS_HOT_NUMBER 4 首页热销商品数量
INDEX_GOODS_NEW_NUMBER 5 首页新品数量
INDEX_GOODS_RECOMMOND_NUMBER 10 首页推荐商品数量
SHOPPING_CART_ITEM_TOTAL_NUMBER 13 购物车最大商品种类数
SHOPPING_CART_ITEM_LIMIT_NUMBER 5 单商品最大购买数量
MALL_VERIFY_CODE_KEY "mallVerifyCode" 前台验证码Session Key
MALL_USER_SESSION_KEY "newBeeMallUser" 前台用户Session Key
GOODS_SEARCH_PAGE_LIMIT 10 商品搜索每页条数
ORDER_SEARCH_PAGE_LIMIT 3 订单列表每页条数
SELL_STATUS_UP 0 商品上架状态
SELL_STATUS_DOWN 1 商品下架状态

5.5 业务结果枚举

文件位置ServiceResultEnum.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/common/ServiceResultEnum.java)

共定义了 23 种业务结果状态:

枚举项 场景
SUCCESS "success" 操作成功
ERROR "error" 操作失败
DATA_NOT_EXIST "未查询到记录!" 数据不存在
SAME_CATEGORY_EXIST "已存在同级同名的分类!" 分类重复
SAME_LOGIN_NAME_EXIST "用户名已存在!" 用户重复
LOGIN_NAME_NULL "请输入登录名!" 登录名为空
LOGIN_PASSWORD_NULL "请输入密码!" 密码为空
LOGIN_VERIFY_CODE_NULL "请输入验证码!" 验证码为空
LOGIN_VERIFY_CODE_ERROR "验证码错误!" 验证码错误
GOODS_NOT_EXIST "商品不存在!" 商品不存在
GOODS_PUT_DOWN "商品已下架!" 商品已下架
SHOPPING_CART_ITEM_LIMIT_NUMBER_ERROR "超出单个商品的最大购买数量!" 超出限购
SHOPPING_CART_ITEM_TOTAL_NUMBER_ERROR "超出购物车最大容量!" 购物车已满
LOGIN_ERROR "登录失败!" 登录失败
LOGIN_USER_LOCKED "用户已被禁止登录!" 用户锁定
ORDER_NOT_EXIST_ERROR "订单不存在!" 订单不存在
NULL_ADDRESS_ERROR "地址不能为空!" 地址为空
ORDER_PRICE_ERROR "订单价格异常!" 价格异常
SHOPPING_ITEM_COUNT_ERROR "库存不足!" 库存不足
ORDER_STATUS_ERROR "订单状态异常!" 状态错误
OPERATE_ERROR "操作失败!" 操作失败
NO_PERMISSION_ERROR "无权限!" 无权限
DB_ERROR "database error" 数据库错误

六、核心业务模块详解

6.1 用户模块

6.1.1 前台用户注册

流程

复制代码
用户填写注册信息 → 校验手机号格式 → 校验验证码
    → 检查用户名是否已存在 → MD5加密密码 → 写入数据库 → 返回成功

关键代码NewBeeMallUserServiceImpl.java#L32-L46(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/service/impl/NewBeeMallUserServiceImpl.java#L32-L46)

java 复制代码
public String register(String loginName, String password) {
    // 1. 检查用户名是否已存在
    if (mallUserMapper.selectByLoginName(loginName) != null) {
        return ServiceResultEnum.SAME_LOGIN_NAME_EXIST.getResult();
    }
    // 2. 创建用户对象
    MallUser registerUser = new MallUser();
    registerUser.setLoginName(loginName);
    registerUser.setNickName(loginName);
    // 3. MD5加密密码
    String passwordMD5 = MD5Util.MD5Encode(password, "UTF-8");
    registerUser.setPasswordMd5(passwordMD5);
    // 4. 保存到数据库
    if (mallUserMapper.insertSelective(registerUser) > 0) {
        return ServiceResultEnum.SUCCESS.getResult();
    }
    return ServiceResultEnum.DB_ERROR.getResult();
}
6.1.2 前台用户登录

流程

复制代码
用户输入账号密码 → 校验验证码 → 查询用户(登录名+密码MD5)
    → 检查是否被锁定 → 生成UserVO → 存入Session → 登录成功

关键代码NewBeeMallUserServiceImpl.java#L48-L67(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/service/impl/NewBeeMallUserServiceImpl.java#L48-L67)

6.1.3 管理员登录

流程

复制代码
管理员输入账号密码 → 校验验证码 → 查询管理员
    → 存入Session(userId + nickName)→ 跳转到后台首页

关键代码AdminController.java#L42-L71(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/controller/admin/AdminController.java#L42-L71)

6.2 订单模块

6.2.1 订单状态流转

订单状态定义在 NewBeeMallOrderStatusEnum.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/common/NewBeeMallOrderStatusEnum.java):

状态值 状态名称 操作方 触发操作
0 待支付 系统 用户提交订单后初始状态
1 已支付 用户 用户完成支付
2 配货完成 管理员 后台点击"配货"
3 出库成功 管理员 后台点击"出库"
4 交易成功 用户 用户确认收货
-1 手动关闭 用户 用户取消订单
-2 超时关闭 系统 订单超时未支付
-3 商家关闭 管理员 后台关闭订单
6.2.2 正常订单流转图
复制代码
                       ┌─────────────┐
                       │   待支付(0)  │
                       └──────┬──────┘
               用户支付 │      │ 用户取消/超时
                      ──▼───  └──────► 手动关闭(-1)
                       │                     超时关闭(-2)
                  ┌────▼─────┐
                  │  已支付(1) │
                  └────┬──────┘
              管理员配货 │
                      ─▼──
                  ┌───────────┐
                  │ 配货完成(2) │
                  └─────┬─────┘
              管理员出库 │
                      ─▼──
                  ┌───────────┐
                  │ 出库成功(3) │
                  └─────┬─────┘
               用户确认收货 │
                      ──▼──
                  ┌───────────┐
                  │ 交易成功(4) │
                  └───────────┘
6.2.3 生成订单核心逻辑

文件位置NewBeeMallOrderServiceImpl.java#L179-L250(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/service/impl/NewBeeMallOrderServiceImpl.java#L179-L250)

生成订单的6大步骤

复制代码
步骤1:获取购物车商品和商品信息
步骤2:校验商品状态(是否下架)
步骤3:校验商品库存(数量是否足够)
步骤4:删除购物车商品 + 扣减库存(事务)
步骤5:生成订单号 + 创建订单主记录
步骤6:生成订单明细快照 + 批量插入

关键代码片段

java 复制代码
@Transactional
public String saveOrder(NewBeeMallUserVO user, 
                        List<NewBeeMallShoppingCartItemVO> myShoppingCartItems) {
    // 1. 查询商品信息
    List<NewBeeMallGoods> newBeeMallGoods = 
        newBeeMallGoodsMapper.selectByPrimaryKeys(goodsIds);
    
    // 2. 检查是否包含已下架商品
    List<NewBeeMallGoods> goodsListNotSelling = newBeeMallGoods.stream()
            .filter(goods -> goods.getGoodsSellStatus() != Constants.SELL_STATUS_UP)
            .collect(Collectors.toList());
    if (!CollectionUtils.isEmpty(goodsListNotSelling)) {
        NewBeeMallException.fail(goodsListNotSelling.get(0).getGoodsName() + "已下架");
    }
    
    // 3. 判断商品库存
    for (NewBeeMallShoppingCartItemVO item : myShoppingCartItems) {
        if (item.getGoodsCount() > goodsMap.get(item.getGoodsId()).getStockNum()) {
            NewBeeMallException.fail(ServiceResultEnum.SHOPPING_ITEM_COUNT_ERROR.getResult());
        }
    }
    
    // 4. 删除购物项 + 扣减库存
    newBeeMallShoppingCartItemMapper.deleteBatch(itemIdList);
    newBeeMallGoodsMapper.updateStockNum(stockNumDTOS);
    
    // 5. 生成订单号 + 保存订单
    String orderNo = NumberUtil.genOrderNo();
    NewBeeMallOrder newBeeMallOrder = new NewBeeMallOrder();
    newBeeMallOrder.setOrderNo(orderNo);
    newBeeMallOrderMapper.insertSelective(newBeeMallOrder);
    
    // 6. 生成订单项快照
    List<NewBeeMallOrderItem> orderItems = new ArrayList<>();
    for (NewBeeMallShoppingCartItemVO item : myShoppingCartItems) {
        NewBeeMallOrderItem orderItem = new NewBeeMallOrderItem();
        BeanUtil.copyProperties(item, orderItem);
        orderItem.setOrderId(newBeeMallOrder.getOrderId());
        orderItems.add(orderItem);
    }
    newBeeMallOrderItemMapper.insertBatch(orderItems);
    
    return orderNo;
}
6.2.4 订单号生成规则

文件位置NumberUtil.java#L48-L53(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/util/NumberUtil.java#L48-L53)

java 复制代码
public static String genOrderNo() {
    StringBuffer buffer = new StringBuffer(String.valueOf(System.currentTimeMillis()));
    int num = genRandomNum(4);  // 4位随机数
    buffer.append(num);
    return buffer.toString();
}

格式时间戳(13位) + 4位随机数 = 共17位

示例15688187285093508

6.3 商品分类模块

6.3.1 三级分类数据组装

文件位置NewBeeMallCategoryServiceImpl.java#L84-L130(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/service/impl/NewBeeMallCategoryServiceImpl.java#L84-L130)

实现思路

复制代码
1. 查询一级分类(10个)
2. 批量查询所有二级分类(一级分类ID列表作为父ID)
3. 批量查询所有三级分类(二级分类ID列表作为父ID)
4. 使用 Stream + groupingBy 按 parentId 分组
5. 逐级组装成树形结构

VO 类结构

复制代码
NewBeeMallIndexCategoryVO (一级分类)
    └── List<SecondLevelCategoryVO> (二级分类列表)
            └── List<ThirdLevelCategoryVO> (三级分类列表)

6.4 购物车模块

6.4.1 购物车操作接口
操作 HTTP方法 路径 说明
购物车列表 GET /shop-cart 页面跳转
添加商品 POST /shop-cart JSON请求
修改数量 PUT /shop-cart JSON请求
删除商品 DELETE /shop-cart/{id} RESTful风格
结算页面 GET /shop-cart/settle 跳转结算页

文件位置ShoppingCartController.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/controller/mall/ShoppingCartController.java)

6.4.2 购物车数量全局注入

通过 NewBeeMallCartNumberInterceptor.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/interceptor/NewBeeMallCartNumberInterceptor.java) 拦截器,在每个请求前更新 Session 中的购物车数量:

java 复制代码
public boolean preHandle(HttpServletRequest request, ...) throws Exception {
    if (null != request.getSession().getAttribute(Constants.MALL_USER_SESSION_KEY)) {
        NewBeeMallUserVO userVO = (NewBeeMallUserVO) 
            request.getSession().getAttribute(Constants.MALL_USER_SESSION_KEY);
        // 查询数据库中最新的购物车数量
        userVO.setShopCartItemCount(
            newBeeMallShoppingCartItemMapper.selectCountByUserId(userVO.getUserId()));
        request.getSession().setAttribute(Constants.MALL_USER_SESSION_KEY, userVO);
    }
    return true;
}

6.5 商品搜索模块

6.5.1 搜索功能

文件位置GoodsController.java#L32-L64(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/controller/mall/GoodsController.java#L32-L64)

支持的搜索方式

  1. 关键词搜索/search?keyword=xxx
  2. 分类搜索/search?goodsCategoryId=xxx
  3. 排序方式/search?orderBy=priceorderBy=new

搜索参数封装

java 复制代码
params.put("keyword", keyword);              // 关键词
params.put("goodsCategoryId", categoryId);   // 分类ID
params.put("goodsSellStatus", Constants.SELL_STATUS_UP); // 只搜上架商品
params.put("page", page);                    // 页码
params.put("limit", Constants.GOODS_SEARCH_PAGE_LIMIT); // 每页条数

七、前台商城接口清单

7.1 首页模块

接口 方法 路径 返回 说明
首页 GET /, /index, /index.html 页面 首页展示(分类、轮播、热销、新品、推荐)

控制器IndexController.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/controller/mall/IndexController.java)

7.2 商品模块

接口 方法 路径 返回 说明
搜索页面 GET /search, /search.html 页面 商品搜索(支持关键词、分类、排序)
商品详情 GET /goods/detail/{goodsId} 页面 商品详情页

控制器GoodsController.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/controller/mall/GoodsController.java)

7.3 购物车模块

接口 方法 路径 返回 登录需要 说明
购物车列表 GET /shop-cart 页面 购物车页面
添加购物车 POST /shop-cart JSON 添加商品到购物车
修改购物车 PUT /shop-cart JSON 修改商品数量
删除购物车 DELETE /shop-cart/{id} JSON 删除购物项
结算页面 GET /shop-cart/settle 页面 订单结算页

控制器ShoppingCartController.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/controller/mall/ShoppingCartController.java)

7.4 订单模块

接口 方法 路径 返回 登录需要 说明
订单列表 GET /orders 页面 我的订单列表
订单详情 GET /orders/{orderNo} 页面 订单详情页
生成订单 GET /saveOrder 重定向 提交订单(从购物车)
取消订单 PUT /orders/{orderNo}/cancel JSON 用户取消订单
确认收货 PUT /orders/{orderNo}/finish JSON 用户确认收货
选择支付 GET /selectPayType 页面 选择支付方式
支付页面 GET /payPage 页面 跳转支付页
支付成功 GET /paySuccess JSON 支付回调

控制器OrderController.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/controller/mall/OrderController.java)

7.5 个人中心模块

接口 方法 路径 返回 登录需要 说明
个人中心 GET /personal 页面 个人信息页
修改信息 POST /personal/updateInfo JSON 修改用户信息

7.6 用户认证模块

接口 方法 路径 返回 说明
登录页 GET /login 页面 登录页面
登录提交 POST /login 重定向 用户登录
注册页 GET /register 页面 注册页面
注册提交 POST /register JSON 用户注册
退出登录 GET /logout 重定向 退出登录

7.7 公共接口

接口 方法 路径 返回 说明
前台验证码 GET /common/mall/kaptcha 图片流 前台图形验证码
文件上传 POST /upload/file JSON 图片上传接口

八、后台管理接口清单

8.1 管理员模块

接口 方法 路径 返回 说明
登录页 GET /admin/login 页面 后台登录页
登录提交 POST /admin/login 重定向 管理员登录
后台首页 GET /admin, /admin/index 页面 后台首页
个人信息 GET /admin/profile 页面 个人资料页
修改密码 POST /admin/profile/password 字符串 修改密码
修改昵称 POST /admin/profile/name 字符串 修改昵称
退出登录 GET /admin/logout 重定向 退出登录
后台验证码 GET /common/kaptcha 图片流 后台验证码

控制器AdminController.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/controller/admin/AdminController.java)

8.2 商品管理模块

接口 方法 路径 返回 说明
商品列表页 GET /admin/goods 页面 商品管理页
商品列表数据 GET /admin/goods/list JSON 分页查询商品
商品详情 GET /admin/goods/info/{id} JSON 获取商品详情
新增商品页 GET /admin/goods/edit 页面 新增商品页面
编辑商品页 GET /admin/goods/edit/{goodsId} 页面 编辑商品页面
新增商品 POST /admin/goods/save JSON 保存商品
修改商品 POST /admin/goods/update JSON 更新商品
批量上下架 PUT /admin/goods/status/{sellStatus} JSON 批量修改销售状态

控制器NewBeeMallGoodsController.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallGoodsController.java)

8.3 分类管理模块

接口 方法 路径 返回 说明
分类列表页 GET /admin/categories 页面 分类管理页
分类列表数据 GET /admin/categories/list JSON 分页查询分类
分类详情 GET /admin/categories/info/{id} JSON 获取分类详情
新增分类 POST /admin/categories/save JSON 保存分类
修改分类 POST /admin/categories/update JSON 更新分类
删除分类 DELETE /admin/categories/delete JSON 批量删除分类
分类列表(按级别) GET /admin/categories/listForSelect JSON 用于三级联动

8.4 轮播图管理模块

接口 方法 路径 返回 说明
轮播图列表页 GET /admin/carousels 页面 轮播图管理页
轮播图列表数据 GET /admin/carousels/list JSON 分页查询
新增轮播图 POST /admin/carousels/save JSON 保存轮播图
修改轮播图 POST /admin/carousels/update JSON 更新轮播图
删除轮播图 DELETE /admin/carousels/delete JSON 批量删除

8.5 首页配置模块

接口 方法 路径 返回 说明
配置列表页 GET /admin/indexConfigs 页面 首页配置页
配置列表数据 GET /admin/indexConfigs/list JSON 分页查询
新增配置 POST /admin/indexConfigs/save JSON 保存配置
修改配置 POST /admin/indexConfigs/update JSON 更新配置
删除配置 DELETE /admin/indexConfigs/delete JSON 批量删除

8.6 订单管理模块

接口 方法 路径 返回 说明
订单列表页 GET /admin/orders 页面 订单管理页
订单列表数据 GET /admin/orders/list JSON 分页查询订单
订单详情 GET /admin/orders/detail/{orderNo} 页面 订单详情页
修改订单 POST /admin/orders/update JSON 修改订单信息
配货操作 PUT /admin/orders/checkDone JSON 批量配货
出库操作 PUT /admin/orders/checkOut JSON 批量出库
关闭订单 PUT /admin/orders/close JSON 批量关闭

8.7 用户管理模块

接口 方法 路径 返回 说明
用户列表页 GET /admin/users 页面 用户管理页
用户列表数据 GET /admin/users/list JSON 分页查询用户
禁用/启用 POST /admin/users/lock/{lockStatus} JSON 批量锁定/解锁

九、前端页面结构详解

9.1 前台商城页面

前台模板位置:src/main/resources/templates/mall/

页面 文件名 说明 主要组件
首页 index.html(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/resources/templates/mall/index.html) 商城首页 分类导航、轮播图、热销、新品、推荐
登录页 login.html 用户登录 验证码、登录表单
注册页 register.html 用户注册 验证码、注册表单
搜索页 search.html 商品搜索 筛选条件、商品列表、分页
详情页 detail.html 商品详情 商品图、价格、规格、加入购物车
购物车 cart.html 购物车列表 商品列表、数量调整、总价计算
订单结算 order-settle.html 订单确认 收货地址、商品清单、提交订单
订单列表 my-orders.html 我的订单 订单列表、状态标签、操作按钮
订单详情 order-detail.html 订单详情 订单信息、商品明细、物流信息
支付选择 pay-select.html 选择支付方式 支付宝/微信支付选择
支付宝页 alipay.html 模拟支付宝支付 二维码、支付金额
微信支付页 wxpay.html 模拟微信支付 二维码、支付金额
个人中心 personal.html 个人信息 头像、昵称、地址修改
公共头部 header.html 公共头部 logo、搜索、购物车、登录
公共底部 footer.html 公共底部 版权信息、链接
个人侧边栏 personal-sidebar.html 个人中心菜单 菜单导航

页面数量:16个(含3个公共片段)

9.2 后台管理页面

后台模板位置:src/main/resources/templates/admin/

页面 文件名 说明 主要组件
登录页 login.html 管理员登录 验证码、登录表单
首页 index.html 后台首页 数据概览、快捷入口
商品管理 newbee_mall_goods.html 商品列表 jqGrid表格、搜索、批量操作
商品编辑 newbee_mall_goods_edit.html 商品新增/编辑 三级分类联动、富文本编辑器、图片上传
分类管理 newbee_mall_category.html 分类列表 表格、增删改查
轮播图管理 newbee_mall_carousel.html 轮播图列表 表格、图片上传、排序
首页配置 newbee_mall_index_config.html 首页配置 类型切换、商品选择
订单管理 newbee_mall_order.html 订单列表 搜索、状态筛选、批量操作
用户管理 newbee_mall_user.html 用户列表 搜索、禁用/启用
个人资料 profile.html 个人信息 修改密码、修改昵称
公共头部 header.html 后台头部 管理员信息、退出
侧边栏 sidebar.html 左侧菜单 功能导航菜单
公共底部 footer.html 底部 版权信息

页面数量:13个(含3个公共片段)

9.3 静态资源结构

复制代码
static/
├── admin/                    # 后台静态资源
│   └── plugins/              # 第三方插件
│       ├── jquery/           # jQuery
│       ├── bootstrap/        # Bootstrap
│       ├── jqgrid-5.5.2/     # jqGrid表格
│       ├── select2/          # Select2下拉框
│       ├── ajaxupload/       # 文件上传
│       └── ...
│
└── mall/                     # 前台静态资源
    ├── css/                  # 样式文件
    │   ├── common.css
    │   ├── index.css
    │   ├── header.css
    │   ├── cart.css
    │   ├── detail.css
    │   └── ...
    ├── js/                   # JavaScript文件
    │   ├── jquery-1.8.0.js
    │   ├── bootstrap3.js
    │   ├── swiper-bundle.min.js
    │   ├── index.js
    │   ├── detail.js
    │   ├── search.js
    │   └── ...
    ├── image/                # 图片资源
    │   ├── swiper/           # 轮播图
    │   ├── sub_banner/       # 子横幅
    │   └── pay/              # 支付相关
    ├── fonts/                # 字体图标
    └── styles/               # 页面专用样式

十、安全与权限机制

10.1 拦截器机制

10.1.1 后台登录拦截器

文件位置AdminLoginInterceptor.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/interceptor/AdminLoginInterceptor.java)

java 复制代码
public boolean preHandle(HttpServletRequest request, ...) throws Exception {
    if (null == request.getSession().getAttribute("loginUserId")) {
        response.sendRedirect(request.getContextPath() + "/admin/login");
        return false;
    }
    return true;
}

拦截规则

  • 拦截所有 /admin/** 路径
  • 排除 /admin/login 登录页
  • 排除静态资源路径
10.1.2 前台登录拦截器

文件位置NewBeeMallLoginInterceptor.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/interceptor/NewBeeMallLoginInterceptor.java)

需要登录的路径

  • 商品详情:/goods/detail/**
  • 购物车:/shop-cart, /shop-cart/**
  • 订单:/saveOrder, /orders, /orders/**
  • 个人中心:/personal, /personal/updateInfo
  • 支付:/selectPayType, /payPage

10.2 密码安全

加密方式:MD5 + 字符集编码

文件位置MD5Util.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/util/MD5Util.java)

java 复制代码
String passwordMD5 = MD5Util.MD5Encode(password, "UTF-8");

注意:MD5 已不再安全,生产环境建议使用 BCrypt、PBKDF2 等更强的加密算法。

10.3 验证码机制

实现库:Easy-Captcha

文件位置CommonController.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/controller/common/CommonController.java)

验证码类型

  • 纯数字(4位)
  • 图片尺寸:前台 110x40,后台 150x40
  • 存入 Session 中

10.4 权限隔离

角色 数据表 拦截器 访问路径
普通用户 tb_newbee_mall_user NewBeeMallLoginInterceptor /, /index, /goods/**, /shop-cart, /orders, ...
管理员 tb_newbee_mall_admin_user AdminLoginInterceptor /admin/**

10.5 全局异常处理

文件位置controller/common/NewBeeMallExceptionHandler.java

统一处理业务异常,返回友好的错误页面或 JSON 错误信息。


十一、核心工具类详解

11.1 BeanUtil - Bean 属性拷贝工具

文件位置BeanUtil.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/util/BeanUtil.java)

方法 说明
copyProperties(source, target, ignore...) 单个对象属性拷贝(基于Spring BeanUtils)
copyList(sources, clazz) 列表批量拷贝
copyList(sources, clazz, callback) 列表拷贝+自定义回调
toMap(bean, ignore...) 对象转Map
toBean(map, beanType) Map转对象
checkPojoNullField(o, clz) 检查POJO是否有null字段

11.2 Result - 统一响应结果

文件位置Result.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/util/Result.java)

java 复制代码
public class Result<T> implements Serializable {
    private int resultCode;      // 状态码
    private String message;      // 提示信息
    private T data;              // 返回数据
}

生成器ResultGenerator.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/util/ResultGenerator.java)

  • genSuccessResult() - 成功(无数据)
  • genSuccessResult(data) - 成功(带数据)
  • genFailResult(message) - 失败(带消息)

11.3 分页工具

PageQueryUtil - 分页查询参数

文件位置PageQueryUtil.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/util/PageQueryUtil.java)

java 复制代码
public class PageQueryUtil extends LinkedHashMap<String, Object> {
    private int page;       // 当前页码
    private int limit;      // 每页条数
    
    public PageQueryUtil(Map<String, Object> params) {
        // 自动从Map中提取page和limit参数
        this.page = Integer.parseInt(params.get("page").toString());
        this.limit = Integer.parseInt(params.get("limit").toString());
        this.put("start", (page - 1) * limit);  // 计算偏移量
        this.put("page", page);
        this.put("limit", limit);
    }
}
PageResult - 分页返回结果
java 复制代码
public class PageResult<T> implements Serializable {
    private int totalPage;       // 总页数
    private int totalCount;      // 总记录数
    private int currentPage;     // 当前页
    private int pageSize;        // 每页条数
    private List<T> list;        // 列表数据
}

11.4 NumberUtil - 数字工具

文件位置NumberUtil.java(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/java/ltd/newbee/mall/util/NumberUtil.java)

方法 说明
isPhone(String phone) 判断是否为11位手机号(正则校验)
genRandomNum(int length) 生成指定长度随机数
genOrderNo() 生成订单号(时间戳+4位随机数)

11.5 MD5Util - MD5加密工具

提供 MD5 加密方法,支持指定字符集。

11.6 其他工具类

工具类 用途
JsonUtil JSON 序列化/反序列化
PatternUtil 正则表达式工具
NewBeeMallUtils 商城专用工具(字符串清理等)
SystemUtil 系统工具

十二、项目部署与运行

12.1 环境要求

软件 版本要求 说明
JDK 1.8+ Java 8 及以上
Maven 3.6+ Maven 构建工具
MySQL 5.7+ 关系型数据库
IDE IntelliJ IDEA / Eclipse 推荐 IDEA

12.2 启动步骤

步骤1:创建数据库
sql 复制代码
CREATE DATABASE mall_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
步骤2:导入数据

执行 SQL 脚本文件:

复制代码
src/main/resources/newbee_mall_schema.sql
步骤3:修改配置

编辑 application.properties(file:///c:/Users/GaryJie/Desktop/基于Java的Mall商城系统的设计与实现/newbee-mall-master/src/main/resources/application.properties):

properties 复制代码
# 修改数据库连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/mall_db?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoReconnect=true&useSSL=false&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=your_password
步骤4:启动项目

方式一:IDE 启动

复制代码
运行 NewBeeMallApplication.main() 方法

方式二:Maven 命令启动

bash 复制代码
mvn spring-boot:run

方式三:打包后启动

bash 复制代码
mvn clean package
java -jar target/newbee-mall-1.0.0-SNAPSHOT.jar
步骤5:访问系统
系统 访问地址 默认账号
前台商城 http://localhost:28089 13700002703 / 123456
后台管理 http://localhost:28089/admin/login admin / 123456

12.3 项目配置说明

数据库连接池配置(HikariCP)
properties 复制代码
spring.datasource.hikari.minimum-idle=5          # 最小空闲连接
spring.datasource.hikari.maximum-pool-size=15    # 最大连接数
spring.datasource.hikari.connection-timeout=30000 # 连接超时(毫秒)
spring.datasource.hikari.idle-timeout=30000       # 空闲超时
spring.datasource.hikari.max-lifetime=30000       # 最大生命周期
端口配置
properties 复制代码
server.port=28089
Thymeleaf 缓存配置
properties 复制代码
spring.thymeleaf.cache=false  # 开发环境建议关闭,生产环境开启

十三、项目优缺点分析

13.1 优点 ✅

13.1.1 架构设计
优点 说明
分层清晰 严格的 MVC 三层架构,职责分离明确
代码规范 包结构、命名规范统一,易于阅读和维护
接口设计合理 RESTful 风格,方法语义明确(GET/POST/PUT/DELETE)
统一返回格式 使用 Result 泛型类统一 API 返回格式
异常处理机制 自定义业务异常 + 全局异常处理
13.1.2 业务实现
优点 说明
功能完整 覆盖电商核心流程(商品、购物车、订单、支付、用户)
双端系统 同时包含前台商城和后台管理系统
三级分类 完善的商品分类体系(一级→二级→三级)
订单快照 订单明细保存商品快照,保证历史数据准确性
订单状态机 完整的订单状态流转,支持多种关闭原因
逻辑删除 所有业务表使用逻辑删除,数据可追溯
13.1.3 学习价值
优点 说明
适合入门 技术选型主流,代码复杂度适中
注释丰富 关键代码有注释,便于理解
SQL 明确 MyBatis XML 手写 SQL,便于学习 SQL 优化
设计模式应用 多种设计模式的实际应用场景

13.2 可改进点 ⚠️

13.2.1 安全性
问题 建议
密码加密弱 仅使用 MD5,易被彩虹表破解
缺少 XSS 防护 用户输入未做充分过滤
缺少 CSRF 防护 表单提交无 CSRF Token
SQL 注入风险 部分动态 SQL 可能存在风险
越权访问 订单查询未充分验证权限
13.2.2 性能优化
问题 建议
无缓存层 每次请求都查数据库
无消息队列 订单超时等依赖定时任务
数据库单节点 无读写分离
无接口限流 可能被恶意刷接口
13.2.3 功能完善
问题 建议
支付模拟 未接入真实支付接口
单地址 只有一个收货地址
无商品评价 缺少评价系统
无商品收藏 不能收藏商品
无物流跟踪 订单无物流信息
无优惠券 缺少营销功能
无会员体系 用户等级缺失
13.2.4 工程化
问题 建议
无单元测试 缺少测试用例
无日志配置 日志框架未充分配置
无 API 文档 接口文档缺失
无监控告警 缺少系统监控
Docker 缺失 无容器化部署

13.3 可扩展方向

13.3.1 技术升级方向
复制代码
当前架构(单体应用)
    │
    ├─► 增加 Redis 缓存
    ├─► 引入消息队列(RabbitMQ / RocketMQ)
    ├─► 前后端分离(Vue / React)
    ├─► 微服务架构(Spring Cloud)
    └─► 容器化部署(Docker + K8s)
13.3.2 业务扩展方向
  • 营销模块:优惠券、秒杀、拼团、满减
  • 内容模块:商品评价、晒单、问答社区
  • 供应商模块:多商户入驻、店铺管理
  • 数据报表:销售统计、用户画像、数据分析
  • 移动端:小程序、H5、APP

十四、学习路径建议

14.1 初学者学习路线

第一阶段:环境搭建与运行(1-2天)
复制代码
1. 安装 JDK 1.8、Maven、MySQL
2. 导入项目到 IDEA
3. 创建数据库,执行 SQL 脚本
4. 修改数据库配置,启动项目
5. 访问前台和后台,熟悉功能
第二阶段:理解项目结构(2-3天)
复制代码
1. 通读 pom.xml,了解依赖
2. 梳理包结构,理解各层职责
3. 学习 application.properties 配置
4. 阅读启动类,理解 Spring Boot 启动流程
5. 画一张架构图
第三阶段:核心代码学习(5-7天)

按模块逐个学习

复制代码
模块1:用户模块(注册、登录、验证码)
  ├─ controller: PersonalController, AdminController
  ├─ service: NewBeeMallUserService, AdminUserService
  ├─ dao: MallUserMapper, AdminUserMapper
  └─ 页面: login.html, register.html, personal.html

模块2:商品分类模块(三级分类)
  ├─ 理解分类层级结构(一级→二级→三级)
  ├─ 学习分类数据的组装算法(Stream + groupingBy)
  └─ 前端三级联动实现

模块3:商品模块(搜索、详情、上下架)
  ├─ 商品搜索 SQL 编写
  ├─ 分页查询实现
  ├─ 富文本编辑器的使用
  └─ 图片上传功能

模块4:购物车模块(增删改查)
  ├─ 购物车 CRUD 操作
  ├─ 购物车数量全局拦截器
  └─ 库存校验逻辑

模块5:订单模块(核心重点)
  ├─ 生成订单的完整事务流程
  ├─ 订单状态机设计
  ├─ 订单快照模式
  ├─ 库存扣减实现
  └─ 支付流程(模拟)

模块6:后台管理模块
  ├─ jqGrid 表格的使用
  ├─ 批量操作实现
  ├─ 管理员权限控制
  └─ 订单管理(配货、出库、关闭)
第四阶段:动手实践(持续)
复制代码
1. 修改首页轮播图数量
2. 增加一个商品筛选条件(如价格区间)
3. 实现收货地址管理功能
4. 增加商品收藏功能
5. 尝试接入真实的支付宝沙箱环境
6. 给项目加上 Redis 缓存

14.2 进阶学习建议

14.2.1 Spring Boot 深入
  • 自动配置原理
  • Starter 机制
  • Spring Boot 事件监听
  • 自定义 Starter
14.2.2 MyBatis 深入
  • 动态 SQL 高级用法
  • 一对一、一对多映射
  • 分页插件(PageHelper)
  • 通用 Mapper / MyBatis-Plus
14.2.3 架构演进
  • 从单体到微服务
  • Spring Cloud 全家桶
  • 分布式事务
  • 分布式缓存

14.3 常见问题排查指南

问题 可能原因 解决方案
启动失败,端口占用 28089 端口被占用 修改 server.port 或关闭占用程序
数据库连接失败 数据库未启动 / 配置错误 检查 MySQL 服务、用户名密码
验证码不显示 Easy-Captcha 字体问题 安装对应字体或换用其他验证码库
图片上传失败 上传目录权限 / 路径配置 检查 upload 目录权限和 Constants 配置
中文乱码 数据库字符集 / 请求编码 确认使用 UTF-8,检查连接参数

附录

A. 核心文件索引

类型 数量 目录位置
Controller 15 src/main/java/ltd/newbee/mall/controller/
Service 接口 8 src/main/java/ltd/newbee/mall/service/
Service 实现 8 src/main/java/ltd/newbee/mall/service/impl/
Mapper 接口 9 src/main/java/ltd/newbee/mall/dao/
Mapper XML 9 src/main/resources/mapper/
Entity 实体 10 src/main/java/ltd/newbee/mall/entity/
VO 视图对象 13 src/main/java/ltd/newbee/mall/controller/vo/
工具类 11 src/main/java/ltd/newbee/mall/util/
枚举类 6 src/main/java/ltd/newbee/mall/common/
拦截器 3 src/main/java/ltd/newbee/mall/interceptor/
前台页面 16 src/main/resources/templates/mall/
后台页面 13 src/main/resources/templates/admin/
数据库表 9 newbee_mall_schema.sql

B. 参考资源


文档结束

本文档基于 Mall v1.0.0-SNAPSHOT 版本分析生成