基于SSM框架的在线药品交易平台 - 源码深度解析
随着互联网技术的飞速发展,传统药品零售行业正迎来数字化转型的关键时期。药品作为特殊商品,其线上交易必须满足更高的安全性、合规性和专业性要求。在此背景下,采用SSM(Spring + Spring MVC + MyBatis)框架构建的医药电商平台应运而生,为消费者和药品供应商之间搭建了安全可靠的数字化桥梁。
系统架构与技术栈
该医药电商平台采用经典的三层架构设计,充分体现了企业级应用的高标准要求:
- 表现层:基于Spring MVC框架,通过DispatcherServlet统一处理用户请求,配合JSP视图技术实现前后端数据的高效交互
- 业务逻辑层:依托Spring框架的IoC容器管理各类Service组件,利用声明式事务管理确保药品交易的数据一致性
- 数据持久层:采用MyBatis框架,通过灵活的XML配置实现对象关系映射,显著提升数据库操作效率
技术选型亮点
- 项目管理:使用Maven进行依赖管理,确保第三方库版本的统一控制
- 前端技术:采用HTML5、CSS3和JavaScript构建响应式用户界面
- 数据存储:MySQL数据库提供稳定可靠的数据存储服务
- 框架整合:SSM三大框架的完美整合,既保证系统稳定性和性能,又为后续功能扩展提供良好基础
数据库设计亮点分析
订单业务表关系设计
平台的核心业务数据模型设计体现了高度的专业性和完整性。订单表(orders)与订单项表(orderitem)之间建立了一对多的关联关系,这种设计充分考虑了药品交易的特殊性:
CREATE TABLE `orders` (
`oid` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单ID',
`money` double DEFAULT NULL COMMENT '金额',
`state` int(11) NOT NULL COMMENT '状态',
`receiveInfo` varchar(255) DEFAULT NULL COMMENT '收货信息',
`phoNum` varchar(255) DEFAULT NULL COMMENT '电话号码',
`order_time` datetime DEFAULT NULL COMMENT '下单时间',
`uid` int(11) NOT NULL COMMENT '用户ID',
`accepter` varchar(100) DEFAULT NULL COMMENT '收货人',
PRIMARY KEY (`oid`),
KEY `FKC3DF62E5FC32F8E` (`uid`),
CONSTRAINT `FKC3DF62E5FC32F8E` FOREIGN KEY (`uid`) REFERENCES `user` (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='订单表'
订单项表通过外键关联确保数据引用完整性,同时为查询优化建立了适当的索引:
CREATE TABLE `orderitem` (
`oiid` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单项ID',
`count` int(11) NOT NULL COMMENT '数量',
`subtotal` double DEFAULT NULL COMMENT '小计',
`pid` int(11) NOT NULL COMMENT '产品ID',
`oid` int(11) NOT NULL COMMENT '订单ID',
PRIMARY KEY (`oiid`),
KEY `FKE8B2AB61E818A405` (`oid`),
KEY `FKE8B2AB6173B4E627` (`pid`),
CONSTRAINT `FKE8B2AB6173B4E627` FOREIGN KEY (`pid`) REFERENCES `product` (`pid`),
CONSTRAINT `FKE8B2AB61E818A405` FOREIGN KEY (`oid`) REFERENCES `orders` (`oid`)
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='订单项表'
药品信息表设计优化
药品表(product)的设计充分考虑了电商平台的业务需求,包含以下关键特性:
CREATE TABLE `product` (
`pid` int(11) NOT NULL AUTO_INCREMENT COMMENT '产品ID',
`pname` varchar(255) NOT NULL COMMENT '产品名称',
`market_price` double DEFAULT NULL COMMENT '市场价',
`shop_price` double NOT NULL COMMENT '店铺价',
`image` varchar(255) DEFAULT NULL COMMENT '图片',
`pdesc` varchar(5000) DEFAULT NULL COMMENT '产品描述',
`is_hot` int(11) DEFAULT NULL COMMENT '是否热门',
`pdate` timestamp NULL DEFAULT NULL COMMENT '产品日期',
`csid` int(11) DEFAULT NULL COMMENT '二级分类ID',
`state` int(11) DEFAULT NULL COMMENT '状态',
PRIMARY KEY (`pid`),
KEY `FKED8DCCEF5F778050` (`csid`),
CONSTRAINT `FKED8DCCEF5F778050` FOREIGN KEY (`csid`) REFERENCES `categorysecond` (`csid`)
) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='产品表'
设计亮点:
- 差异化定价策略(市场价格 vs 店铺价格)
- 热门药品标识功能
- 完整的药品分类体系
- 药品状态管理机制
核心功能实现
购物车管理功能
购物车功能采用独立的购物车项表(shopcartitem)设计,支持用户离线添加商品和批量操作:
// 购物车项实体类核心字段定义
public class ShopCartItem {
private Integer cartitemid; // 购物车项ID
private Integer uid; // 用户ID
private Integer pid; // 产品ID
private Integer pcount; // 产品数量
private Double price; // 价格
private String image; // 图片
private Double ptotal; // 产品总价
private String pname; // 产品名称
// 计算单项总价的方法
public void calculateSubtotal() {
if (this.price != null && this.pcount != null) {
this.ptotal = this.price * this.pcount;
}
}
}

管理员商品管理功能
管理员控制器实现了完整的商品CRUD操作,包含图片上传和分类管理:
@Controller
public class AdminController {
@Autowired
private ProductService productService;
@RequestMapping("/admin/product_save")
public String product_save(@RequestParam MultipartFile file,
Product product, HttpServletRequest request)
throws Exception {
// 文件上传处理
if (file != null && !file.isEmpty()) {
String originalFilename = file.getOriginalFilename();
String newFileName = UUIDUtiils.getUUID() +
originalFilename.substring(originalFilename.lastIndexOf("."));
String realPath = request.getSession().getServletContext()
.getRealPath("/products/1/");
File targetFile = new File(realPath, newFileName);
file.transferTo(targetFile);
product.setImage("products/1/" + newFileName);
}
// 设置商品上架时间
product.setPdate(new Date());
productService.adminProduct_save(product);
return "redirect:/admin/adminProduct_findAll?page=1";
}
// 商品分页查询
@RequestMapping("/admin/adminProduct_findAll")
public String adminProduct_findAll(@RequestParam int page, Model model) {
PageBean<Product> pageBean = productService.adminFindAllByPage(page);
model.addAttribute("pageBean", pageBean);
功能特色:
- 支持图片上传和重命名
- 自动设置商品上架时间
- 分页查询优化性能
- 完整的异常处理机制
该平台通过SSM框架的深度整合,为药品电商行业提供了稳定、安全、高效的解决方案,具有良好的示范意义和实用价值。