基于SSM框架的水果在线销售平台 - 源码深度解析
在当今电商行业蓬勃发展的背景下,传统水果零售行业面临着多重挑战:销售渠道单一、库存管理效率低下、客户服务体验不佳等。为应对这些痛点,我们设计并实现了一个基于SSM框架的企业级水果电商平台,为中小型水果商家提供完整的线上销售解决方案。
系统架构与技术栈
该平台采用经典的三层架构设计(表示层、业务逻辑层、数据访问层),确保系统的高内聚低耦合特性。
后端技术栈:
- Spring框架:作为核心容器,通过依赖注入(DI)实现组件解耦,利用面向切面编程(AOP)处理日志、事务等横切关注点
- Spring MVC:负责Web请求的调度和处理,实现清晰的MVC分离
- MyBatis:作为数据持久层框架,通过灵活的XML映射配置实现对象关系映射(ORM),支持动态SQL
前端技术栈:
- JSP:用于动态页面渲染,结合JSTL标签库简化开发
- HTML/CSS/JavaScript:构建响应式用户界面,提升用户体验
- Maven:项目管理工具,统一依赖管理,确保项目结构的规范性和可维护性
// 基础控制器类 - 提供通用功能封装
package com.neusoft.base;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSONObject;
public class BaseController {
protected Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* 统一响应结果处理方法
* @param obj 响应对象
* @return JSON格式字符串
*/
public String responseResult(Object obj) {
String jsonObj = null;
if (obj != null) {
logger.info("后端返回对象:{}", obj);
jsonObj = JSONObject.toJSONString(obj);
logger.info("后端返回数据:" + jsonObj);
}
return jsonObj;
}
/**
* 字符串空值校验
* @param str 待校验字符串
* @return 是否为空
*/
public boolean isEmpty(String str) {
return (null == str) || (str.trim().length() <= 0);
}
/**
* 创建Map对象便捷方法
* @return 空Map实例
*/
public Map<String,Object> getMap(){
return new HashMap<String,Object>();
}
}
数据库设计亮点分析
商品表设计优化
商品表(item)的设计充分考虑了电商平台的业务需求,采用多字段存储商品信息和展示数据:
CREATE TABLE `item` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`name` varchar(255) DEFAULT NULL COMMENT '商品名称',
`price` varchar(255) DEFAULT NULL COMMENT '商品价格',
`scNum` int(11) DEFAULT NULL COMMENT '收藏数',
`gmNum` int(11) DEFAULT NULL COMMENT '购买数',
`url1` varchar(255) DEFAULT NULL COMMENT '主图URL',
`url2` varchar(255) DEFAULT NULL COMMENT '详情图URL1',
`url3` varchar(255) DEFAULT NULL COMMENT '详情图URL2',
`url4` varchar(255) DEFAULT NULL COMMENT '详情图URL3',
`url5` varchar(255) DEFAULT NULL COMMENT '详情图URL4',
`ms` text DEFAULT NULL COMMENT '商品描述',
`pam1` varchar(255) DEFAULT NULL COMMENT '规格参数1',
`pam2` varchar(255) DEFAULT NULL COMMENT '规格参数2',
`pam3` varchar(255) DEFAULT NULL COMMENT '规格参数3',
`val3` varchar(255) DEFAULT NULL COMMENT '参数值3',
`val2` varchar(255) DEFAULT NULL COMMENT '参数值2',
`val1` varchar(255) DEFAULT NULL COMMENT '参数值1',
`type` int(11) DEFAULT NULL COMMENT '商品类型',
`zk` int(10) DEFAULT NULL COMMENT '折扣比例',
`category_id_one` int(11) DEFAULT NULL COMMENT '一级分类ID',
`category_id_two` int(11) DEFAULT NULL COMMENT '二级分类ID',
`isDelete` int(2) DEFAULT NULL COMMENT '删除标志:0-正常,1-删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=132 DEFAULT CHARSET=utf8 COMMENT='商品信息表'
设计亮点分析:
多图存储设计
- 采用5个独立URL字段,支持商品详情页的多角度展示
- 便于实现轮播图、详情图分离的展示效果
业务统计字段
scNum(收藏数)和gmNum(购买数)实时更新- 为热门商品推荐算法提供数据支持
数据安全设计
- 使用
isDelete字段实现逻辑删除,避免物理删除导致数据丢失 - 保留历史数据的同时确保业务数据的完整性
- 使用
分类体系优化
- 二级分类设计支持灵活的商品分类管理
- 便于实现多级商品导航和筛选功能
购物车表设计
购物车表(car)的设计注重用户体验和数据完整性:
CREATE TABLE `car` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`item_id` int(11) DEFAULT NULL COMMENT '商品ID',
`user_id` int(11) DEFAULT NULL COMMENT '用户ID',
`num` int(11) DEFAULT NULL COMMENT '购买数量',
`price` decimal(10,2) DEFAULT NULL COMMENT '加入时价格',
`total` varchar(255) DEFAULT NULL COMMENT '合计金额',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8 COMMENT='购物车表'
设计特点:
- 精确金额计算:使用
decimal(10,2)类型存储价格,避免浮点数精度问题 - 价格快照机制:独立存储加入购物车时的商品价格,防止后续调价影响用户体验
- 关联关系清晰:通过
user_id和item_id建立用户与商品的多对多关系

核心功能实现
商品管理模块
商品管理模块严格遵循MVC设计模式,各层职责清晰:
控制器层(Controller):接收前端请求,进行参数校验和结果返回
@Controller
@RequestMapping("/item")
public class ItemController extends BaseController {
@Autowired
private ItemService itemService;
/**
* 获取商品列表(支持分页和条件查询)
*/
@RequestMapping("/list")
@ResponseBody
public String getItemList(@RequestParam Map<String, Object> params) {
try {
Map<String, Object> result = itemService.getItemList(params);
return responseResult(result);
} catch (Exception e) {
logger.error("获取商品列表失败:", e);
return responseResult(Result.error("系统错误"));
}
}
/**
* 获取商品详情
*/
@RequestMapping("/detail/{id}")
public String getItemDetail(@PathVariable("id") Integer id, Model model) {
Item item = itemService.getItemById(id);
model.addAttribute("item", item);
return "item/detail";
}
}
服务层(Service):处理核心业务逻辑,确保事务一致性
@Service
public class ItemServiceImpl implements ItemService {
@Autowired
private ItemMapper itemMapper;
@Override
public Map<String, Object> getItemList(Map<String, Object> params) {
Map<String, Object> result = new HashMap<>();
// 构建动态查询条件
Example example = new Example(Item.class);
Example.Criteria criteria = example.createCriteria();
// 分类筛选条件
if (!isEmpty(params.get("categoryId"))) {
criteria.andEqualTo("categoryIdOne", params.get("categoryId"));
}
// 关键词搜索条件
if (!isEmpty(params.get("keyword"))) {
criteria.andLike("name", "%" + params.get("keyword") + "%");
}
// 分页查询实现
PageHelper.startPage(Integer.parseInt(params.get("page").toString()),
Integer.parseInt(params.get("limit").toString()));
// 后续查询逻辑...
}
}
技术实现细节:
- 分页插件集成:使用PageHelper实现物理分页,提升大数据量查询性能
- 动态查询构建:通过Example类构建灵活的条件查询,避免硬编码SQL
- 统一异常处理:采用全局异常处理机制,确保系统稳定性
- 日志记录:使用SLF4J日志框架,记录关键操作日志便于问题排查
该水果电商平台通过合理的架构设计和细致的技术实现,为传统水果零售行业提供了完整的数字化转型解决方案,具有良好的可扩展性和维护性。