基于SSM框架的在线药品销售平台 - 源码深度解析
随着互联网技术的飞速发展和医药行业的数字化转型,传统药品销售模式正经历着深刻变革。药品作为特殊商品,其销售过程需要严格的质量控制、专业的用药指导和完整的追溯体系。基于SSM(Spring+SpringMVC+MyBatis)框架的在线药品销售平台应运而生,不仅为消费者提供了便捷、安全的药品购买渠道,更通过技术手段确保了现代医药零售的合规性和专业性。
系统架构与技术栈深度解析
该平台采用业界经典的MVC三层架构设计,实现了前后端分离的开发模式:
架构层次设计
- 表示层:基于HTML5、CSS3、JavaScript构建响应式用户界面
- 业务逻辑层:SSM框架实现核心业务处理和数据交互
- 数据持久层:MySQL关系型数据库进行数据存储
核心技术栈组成
前端技术体系
- HTML5:语义化标签,提升SEO效果
- CSS3:媒体查询实现响应式布局
- JavaScript:Ajax异步交互,提升用户体验
后端框架组合
- Spring框架:控制反转(IoC)和面向切面编程(AOP)实现松耦合
- SpringMVC:基于DispatcherServlet的请求分发机制
- MyBatis:半自动ORM映射,SQL可优化性强
支撑技术栈
- MySQL 5.7+:事务ACID特性保证数据一致性
- Maven 3.6+:依赖管理和项目构建标准化
- Tomcat 8.5+:Servlet容器,支持高并发访问
数据库设计亮点深度剖析
商品表(item)业务逻辑设计
CREATE TABLE `item` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`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 '图片URL1',
`url2` varchar(255) DEFAULT NULL COMMENT '图片URL2',
`url3` varchar(255) DEFAULT NULL COMMENT '图片URL3',
`url4` varchar(255) DEFAULT NULL COMMENT '图片URL4',
`url5` varchar(255) DEFAULT NULL COMMENT '图片URL5',
`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-删除',
`num` int(2) DEFAULT 0 COMMENT '库存数量',
PRIMARY KEY (`id`),
KEY `idx_category` (`category_id_one`,`category_id_two`),
KEY `idx_status` (`isDelete`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='商品表'
设计亮点技术解析
多维度图片存储设计
- 支持5张商品图片,满足药品多角度展示需求
- 符合医药电商平台对药品外观、说明书等可视化要求
动态参数化架构
// 参数映射示例 Map<String, String> paramMap = new HashMap<>(); paramMap.put("规格", val1); paramMap.put("剂型", val2); paramMap.put("生产企业", val3);- pam1-pam3定义参数名称,val1-val3存储具体数值
- 灵活适配不同药品类型的参数展示需求
库存精准控制机制
- num字段实时跟踪库存数量
- 数据库事务保证库存操作的原子性
数据完整性保护
- isDelete软删除标识,避免物理删除导致数据丢失
- 支持数据审计和恢复操作
高效分类检索体系
- 二级分类设计支持精细化商品管理
- 联合索引提升分类查询性能
购物车表(car)业务模型设计
CREATE TABLE `car` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`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`),
KEY `idx_user_item` (`user_id`,`item_id`),
CONSTRAINT `fk_car_item` FOREIGN KEY (`item_id`) REFERENCES `item` (`id`),
CONSTRAINT `fk_car_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='购物车表'
业务特性分析
- 金融级精度控制:price字段采用decimal(10,2)类型,确保金额计算零误差
- 性能优化设计:total字段预计算,减轻前端计算压力
- 引用完整性约束:外键约束保证数据一致性

核心业务功能实现深度解析
1. 多层次安全认证体系
系统采用基于角色的访问控制(RBAC)模型,通过自定义拦截器实现精细化的权限管理:
package com.neusoft.base;
import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSONObject;
/**
* Controller基类 - 统一异常处理和响应封装
*/
public abstract class BaseController {
protected Logger logger = LoggerFactory.getLogger(this.getClass());
protected static final String DATE_FORMAT = "yyyy-MM-dd";
/**
* 统一响应结果封装
* @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);
}
logger.info("输出结果:{}", jsonObj);
return jsonObj;
}
// 全面的参数校验工具方法
public boolean isEmpty(String str) {
return (null == str) || (str.trim().length() <= 0);
}
public boolean isEmpty(Character cha) {
return (null == cha) || cha.equals(' ');
}
public boolean isEmpty(Object obj) {
return (null == obj);
}
public boolean isEmpty(Object[] objs) {
return (null == objs) || (objs.length <= 0);
}
public boolean isEmpty(Collection<?> obj) {
return (null == obj) || obj.isEmpty();
}
public boolean isEmpty(Set<?> set) {
return (null == set) || set.isEmpty();
}
public boolean isEmpty(Serializable obj) {
return null == obj;
}
public boolean isEmpty(Map<?, ?> map) {
return (null == map) || map.isEmpty();
}
/**
* 快速创建响应Map对象
*/
public Map<String,Object> getMap(){
return new HashMap<String,Object>();
}
}
安全特性实现
- 会话管理:基于Redis分布式会话存储
- 密码加密:BCrypt强哈希加密算法
- 权限验证:注解驱动的权限控制

2. 商品管理系统的技术实现
商品管理模块采用标准的DAO-Service-Controller分层架构,通过MyBatis的动态SQL实现灵活的数据查询:
@Service
@Transactional
public class ItemService {
@Autowired
private ItemMapper itemMapper;
/**
* 分页分类查询商品列表
* @param categoryId 分类ID
* @param page 页码
* @param size 页大小
* @return 商品分页数据
*/
public List<Item> findItemsByCategory(Integer categoryId, Integer page, Integer size) {
Map<String, Object> params = new HashMap<>();
params.put("categoryId", categoryId);
params.put("offset", (page - 1) * size);
params.put("limit", size);
return itemMapper.selectByCategory(params);
}
/**
* 商品库存扣减 - 事务保证一致性
*/
@Transactional(rollbackFor = Exception.class)
public boolean reduceStock(Integer itemId, Integer quantity) {
int affectedRows = itemMapper.updateStock(itemId, quantity);
return affectedRows > 0;
}
}
技术亮点
- 事务管理:@Transactional注解保证业务原子性
- 缓存优化:Redis缓存热点商品数据
- 搜索优化:数据库索引+Elasticsearch全文检索
该平台通过严谨的技术架构和精心的数据库设计,为在线药品销售提供了安全、可靠、高效的技术支撑,充分体现了SSM框架在企业级应用中的成熟性和稳定性。