SSM+JSP农产品销售平台实战:完整电商系统设计与实现
项目概述
这是一个基于 SSM(Spring + SpringMVC + MyBatis) 框架构建的农产品销售平台,采用传统的 JSP 作为前端视图技术。项目实现了完整的农产品电商业务流程,包括用户管理、商家管理、商品管理、购物车、订单处理、物流配送等核心功能模块。
技术栈
| 分类 | 技术 | 版本 |
|---|---|---|
| 后端框架 | Spring | 4.2.x |
| Web框架 | SpringMVC | 4.2.x |
| ORM框架 | MyBatis | 3.x |
| 数据库 | MySQL | 5.7+ |
| 连接池 | HikariCP | - |
| 前端技术 | JSP + jQuery + Bootstrap | - |
| JSON处理 | Jackson | 2.x |
| 日志框架 | Log4j | 1.x |
项目结构
bishe/
├── src/com/spring/
│ ├── controller/ # 控制器层
│ │ ├── AdminsController.java # 管理员控制器
│ │ ├── YonghuController.java # 用户控制器
│ │ ├── ShangjiaController.java # 商家控制器
│ │ ├── ShangpinxinxiController.java # 商品信息控制器
│ │ ├── GouwucheController.java # 购物车控制器
│ │ ├── DingdanController.java # 订单控制器
│ │ ├── FahuoController.java # 发货控制器
│ │ ├── QianshouController.java # 签收控制器
│ │ └── ...
│ ├── service/ # 服务层
│ │ └── impl/ # 服务实现
│ ├── dao/ # 数据访问层
│ ├── entity/ # 实体类
│ ├── interceptor/ # 拦截器
│ │ └── AuthInterceptor.java # 权限拦截器
│ ├── util/ # 工具类
│ └── config/ # 配置类
├── resources/
│ ├── applicationContext.xml # Spring配置文件
│ ├── mybatis-config.xml # MyBatis配置
│ ├── jdbc.properties # 数据库配置
│ ├── log4j.properties # 日志配置
│ └── sqlmap/ # MyBatis映射文件
│ ├── ShangpinxinxiMapper.xml
│ ├── YonghuMapper.xml
│ └── ...
└── web/
├── images/ # 图片资源
├── css/ # 样式文件
├── js/ # JavaScript文件
└── upload/ # 上传文件目录
核心功能模块
1. 用户角色体系
项目实现了三端用户体系:
| 角色 | 说明 | 主要功能 |
|---|---|---|
| 管理员 | 系统最高权限 | 用户管理、商家审核、商品审核、订单管理、数据统计 |
| 商家 | 农产品销售方 | 商品发布、库存管理、订单处理、发货管理 |
| 用户 | 消费者 | 商品浏览、购物车、下单购买、订单跟踪、收货确认 |
2. 商品管理模块(Shangpinxinxi)
功能特性:
- 商品信息的增删改查
- 商品分类管理(水果/蔬菜/粮食等)
- 商品图片上传
- 库存与销量统计
- 商品搜索与筛选
核心实体类:
public class Shangpinxinxi implements Serializable {
private Integer id; // 商品ID
private String shangpinbianhao; // 商品编号
private String shangpinmingcheng; // 商品名称
private String tupian; // 商品图片
private String leixing; // 商品类型
private Integer kucun; // 库存
private Integer xiaoliang; // 销量
private Double jiage; // 价格
private String chanpinmiaoshu; // 产品描述
private String shangjia; // 商家
}
3. 购物车模块(Gouwuche)
功能特性:
- 添加商品到购物车
- 修改购买数量
- 删除购物车商品
- 购物车批量结算
4. 订单管理模块
订单状态流转:
待支付 → 已支付 → 待发货 → 已发货 → 已签收
↓
已取消
订单表结构:
CREATE TABLE dingdan (
id INT PRIMARY KEY AUTO_INCREMENT,
dingdanbianhao VARCHAR(50) NOT NULL, -- 订单编号
dingdanxinxi TEXT NOT NULL, -- 订单信息(HTML格式)
dingdanjine DECIMAL(10,2) NOT NULL, -- 订单金额
dingdanzhuangtai VARCHAR(50) NOT NULL, -- 订单状态
shangjia VARCHAR(64) NOT NULL, -- 商家
dizhi INT NOT NULL, -- 地址ID
xingming VARCHAR(50) NOT NULL, -- 姓名
lianxidianhua VARCHAR(50) NOT NULL, -- 联系电话
xiangxidizhi VARCHAR(255) NOT NULL, -- 详细地址
xiadanren VARCHAR(64) NOT NULL, -- 下单人
iszf VARCHAR(10) DEFAULT '否' -- 是否支付
);
5. 物流管理模块
发货模块(Fahuo):
- 商家发货处理
- 物流信息录入
签收模块(Qianshou):
- 用户确认收货
- 订单完成处理
取消订单模块(Quxiaodingdan):
- 用户取消订单
- 库存回滚处理
6. 地址管理模块(Shouhuodizhi)
- 用户收货地址的增删改查
- 默认地址设置
7. 反馈与回复模块
在线反馈(Zaixianfankui):
- 用户提交反馈意见
反馈回复(Fankuihuifu):
- 管理员回复用户反馈
8. 轮播图模块(Lunbotu)
- 首页轮播图管理
- 支持图片上传与排序
关键技术实现
1. Spring配置
数据源配置(HikariCP):
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="minimumIdle" value="20"/>
<property name="maximumPoolSize" value="100"/>
<property name="connectionTestQuery" value="select 1"/>
</bean>
MyBatis集成:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:sqlmap/*Mapper.xml"/>
<property name="typeAliasesPackage" value="com.spring.entity"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
2. 权限拦截器
通过 AuthInterceptor 实现登录验证:
public class AuthInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
if (request.getSession().getAttribute("username") == null ||
"".equals(request.getSession().getAttribute("username"))) {
response.sendRedirect("./login.do");
return false;
}
return true;
}
}
拦截器配置:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/main.do"/>
<mvc:mapping path="/*_*.do"/>
<bean class="com.spring.interceptor.AuthInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
3. 控制器基类
所有控制器继承 BaseController,提供通用方法:
@Controller
public class ShangpinxinxiController extends BaseController {
@Autowired
private ShangpinxinxiMapper dao;
@Autowired
private ShangpinxinxiService service;
@RequestMapping("/shangpinxinxi_list")
public String list() {
if (!checkLogin()) {
return showError("尚未登录", "./login.do");
}
// 业务逻辑...
return "shangpinxinxi_list";
}
}
4. 分页查询
使用自定义的 SelectExample 实现分页:
SelectExample example = new SelectExample();
String where = " 1=1 ";
where += getWhere(); // 获取搜索条件
example.setWhere(where);
example.setOrder(order + " " + sort);
int page = request.getParameter("page") == null ? 1 :
Integer.valueOf(request.getParameter("page"));
List<Shangpinxinxi> list = service.selectPage(example, page, 12);
5. 文件上传
使用自定义的 Uploader 工具类处理文件上传:
@RequestMapping("/upload")
public void upload() {
String file = Uploader.upload(request);
if (file != null) {
renderText(file);
} else {
renderText("上传失败");
}
}
数据库设计
核心表清单
| 表名 | 中文名 | 用途 |
|---|---|---|
admins |
管理员表 | 后台管理员登录 |
yonghu |
用户表 | 前端用户信息 |
shangjia |
商家表 | 商家信息 |
shangpinxinxi |
商品信息表 | 商品数据存储 |
shangpinleixing |
商品类型表 | 商品分类 |
gouwuche |
购物车表 | 购物车数据 |
dingdan |
订单表 | 订单主表 |
dingdandingdanxinxi |
订单详情表 | 订单商品明细 |
shouhuodizhi |
收货地址表 | 用户地址 |
fahuo |
发货表 | 发货记录 |
qianshou |
签收表 | 签收记录 |
quxiaodingdan |
取消订单表 | 取消订单记录 |
zaixianfankui |
在线反馈表 | 用户反馈 |
fankuihuifu |
反馈回复表 | 反馈回复 |
lunbotu |
轮播图表 | 首页轮播 |
表关系设计
admins(管理员)
↓
yonghu(用户) ←→ shouhuodizhi(收货地址)
↓
├── gouwuche(购物车) ←→ shangpinxinxi(商品)
├── dingdan(订单) ←→ shangjia(商家)
│ └── dingdandingdanxinxi(订单详情)
├── qianshou(签收) ←→ dingdan(订单)
├── quxiaodingdan(取消) ←→ dingdan(订单)
└── zaixianfankui(反馈)
└── fankuihuifu(回复)
部署与运行
环境要求
- JDK 1.8+
- Tomcat 8.5+
- MySQL 5.7+
- Maven 3.5+
运行步骤
- 创建数据库:
CREATE DATABASE 2023051202 CHARACTER SET utf8mb4;
- 导入数据:
mysql -u root -p 2023051202 < 2023051202.sql
- 修改数据库配置:
编辑resources/jdbc.properties:
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/2023051202?useUnicode=true&characterEncoding=UTF-8&useSSL=FALSE&serverTimezone=UTC
jdbc.username=root
jdbc.password=你的密码
- 部署到Tomcat:
- 将项目打包为WAR文件
- 部署到Tomcat的webapps目录
- 启动Tomcat服务器
- 访问地址:
- 前台:
http://localhost:8080/bishe/ - 后台:
http://localhost:8080/bishe/login.do
测试账户
管理员账户:
- 用户名:
admin - 密码:
admin
项目亮点
-
多角色权限管理:实现了管理员、商家、用户三端分离,权限控制清晰。
-
完整订单流程:从下单、支付、发货、签收到取消,覆盖电商全流程。
-
数据可视化:集成ECharts实现销售数据统计与可视化展示。
-
高性能连接池:使用HikariCP替代传统的DBCP,提升数据库连接性能。
-
拦截器权限控制:基于Spring拦截器实现统一的登录验证和权限控制。
-
热部署支持:集成Mapper热部署插件,开发时无需重启服务器。
-
文件上传功能:支持商品图片、轮播图等文件上传。
-
搜索与筛选:商品支持多条件搜索和分类筛选。
总结
该农产品销售平台是一个功能完整、架构清晰的SSM实战项目,适合作为学习SSM框架开发的参考案例,也可作为课程设计或毕业设计的基础框架。项目采用传统的JSP技术栈,代码结构规范,注释完善,具备良好的可维护性和扩展性。
通过本项目的学习,可以深入理解:
- SSM框架的整合与配置
- MyBatis映射文件的编写
- Spring拦截器的使用
- 多角色权限管理的设计
- 电商业务流程的实现
更多推荐




所有评论(0)