随着互联网技术的快速发展,传统鲜花零售行业面临着信息不透明、交易效率低下、库存管理困难等痛点。鲜花在线销售平台应运而生,采用成熟的SSM(Spring+SpringMVC+MyBatis)框架构建,为中小型花店和花卉批发商提供完整的电商解决方案。该系统通过标准化的业务流程,实现了鲜花选购、在线支付、订单跟踪、库存同步等核心功能的数字化管理。
系统架构与技术栈
该平台采用典型的三层架构设计,前端使用HTML、CSS和JavaScript构建用户界面,后端基于SSM框架实现业务逻辑。Spring框架负责依赖注入和事务管理,确保业务组件的松耦合和数据一致性。SpringMVC作为Web层框架,处理用户请求的路由和视图渲染,实现前后端分离的开发模式。MyBatis作为持久层框架,通过灵活的XML配置实现数据库操作的映射,支持动态SQL生成,简化了对复杂查询的处理。
// Spring配置示例
@Configuration
@EnableTransactionManagement
@ComponentScan("com.spring.service")
public class SpringConfig {
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/flower_db");
dataSource.setUsername("root");
dataSource.setPassword("123456");
return dataSource;
}
}
数据库设计亮点
购物车表设计优化
gouwuche表的设计体现了电商平台的核心业务需求。表结构采用适当的字段类型和索引策略,确保高性能的购物车操作:
CREATE TABLE `gouwuche` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`flowerxinxiid` int(10) unsigned NOT NULL COMMENT '鲜花信息id',
`flowerbianhao` varchar(50) NOT NULL COMMENT '鲜花编号',
`flowermingcheng` varchar(255) NOT NULL COMMENT '鲜花名称',
`fenlei` int(10) unsigned NOT NULL COMMENT '分类',
`xiaoshoujiage` decimal(18,2) NOT NULL COMMENT '销售价格',
`goumaishuliang` int(11) NOT NULL COMMENT '购买数量',
`xiaoji` decimal(18,2) NOT NULL COMMENT '小计',
`goumairen` varchar(50) NOT NULL COMMENT '购买人',
`addtime` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '添加时间',
PRIMARY KEY (`id`),
KEY `gouwuche_flowerxinxiid_index` (`flowerxinxiid`),
KEY `gouwuche_fenlei_index` (`fenlei`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='购物车'
设计亮点分析:
- 使用
decimal(18,2)类型存储金额,确保财务计算的精确性 - 为
flowerxinxiid和fenlei字段建立索引,优化关联查询性能 xiaoji字段预计算小计金额,减少实时计算开销- 采用InnoDB存储引擎,支持事务处理和行级锁定
订单信息表的关系设计
dingdanxinxi表与dingdanqianshou_dingdanxinxi表构成了完整的订单管理体系:
CREATE TABLE `dingdanxinxi` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`dingdanbianhao` varchar(50) NOT NULL COMMENT '订单编号',
`dingdanxinxi` text NOT NULL COMMENT '订单信息',
`zongjijine` decimal(18,2) NOT NULL COMMENT '总计金额',
`shouhuoren` varchar(50) NOT NULL COMMENT '收货人',
`dianhua` varchar(50) NOT NULL COMMENT '电话',
`dizhi` varchar(255) NOT NULL COMMENT '地址',
`beizhu` text NOT NULL COMMENT '备注',
`zhuangtai` varchar(255) NOT NULL COMMENT '状态',
`xiadanren` varchar(50) NOT NULL COMMENT '下单人',
`iszf` varchar(10) NOT NULL DEFAULT '否' COMMENT '是否支付',
`addtime` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '添加时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='订单信息'

核心功能实现
用户购物车管理
购物车功能采用Session与数据库结合的方式实现,确保用户数据的持久化和一致性:
@Controller
@RequestMapping("/cart")
public class CartController extends BaseController {
@Autowired
private GouwucheService gouwucheService;
@RequestMapping("/add")
public String addToCart(HttpServletRequest request) {
String flowerxinxiid = Request.get("flowerxinxiid");
String goumaishuliang = Request.get("goumaishuliang");
String goumairen = session.getAttribute("username").toString();
// 检查商品是否已存在购物车
Example example = new Example(Gouwuche.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("flowerxinxiid", flowerxinxiid);
criteria.andEqualTo("goumairen", goumairen);
List<Gouwuche> list = gouwucheService.selectExample(example);
if(list.size() > 0) {
// 更新数量
Gouwuche cart = list.get(0);
cart.setGoumaishuliang(cart.getGoumaishuliang() + Integer.parseInt(goumaishuliang));
cart.setXiaoji(cart.getXiaoshoujiage().multiply(new BigDecimal(cart.getGoumaishuliang())));
gouwucheService.update(cart);
} else {
// 新增购物车项
Gouwuche cart = new Gouwuche();
// 设置商品信息...
gouwucheService.insert(cart);
}
return showSuccess("添加成功", "cart_list.do");
}
}

订单处理流程
订单处理采用状态机模式,确保订单状态流转的准确性:
@Service
public class OrderService {
@Autowired
private DingdanxinxiMapper dingdanxinxiMapper;
@Transactional
public void createOrder(Dingdanxinxi order, List<Gouwuche> cartItems) {
// 生成订单编号
String orderNo = generateOrderNumber();
order.setDingdanbianhao(orderNo);
// 计算总金额
BigDecimal totalAmount = BigDecimal.ZERO;
for(Gouwuche item : cartItems) {
totalAmount = totalAmount.add(item.getXiaoji());
}
order.setZongjijine(totalAmount);
// 保存订单
dingdanxinxiMapper.insert(order);
// 清空购物车
clearCart(cartItems);
}
private String generateOrderNumber() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
return "DD" + sdf.format(new Date()) +
String.format("%04d", (int)(Math.random() * 10000));
}
}
商品分类管理
鲜花分类采用树形结构设计,支持多级分类管理:
@Entity
@Table(name = "flowerfenlei")
public class Flowerfenlei implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "fenleimingcheng")
private String fenleimingcheng;
@Column(name = "parentid")
private Integer parentid;
@Column(name = "addtime")
private String addtime;
// 省略getter/setter方法
}

实体模型设计
系统采用JPA注解实现对象关系映射,确保实体类与数据库表的精确对应:
@Table(name = "admins")
public class Admins implements Serializable {
@GeneratedValue(generator = "JDBC")
@Id
@Column(name = "id", insertable = false)
private Integer id;
@Column(name = "username")
private String username;
@Column(name = "pwd")
private String pwd;
@Column(name = "addtime")
private String addtime;
private static final long serialVersionUID = 1L;
// 标准的getter和setter方法
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username == null ? "" : username.trim();
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd == null ? "" : pwd.trim();
}
}
功能展望与优化
1. 引入Redis缓存优化
现状分析:当前系统频繁查询商品信息、分类数据等热点数据,数据库压力较大。
优化方案:
@Service
public class FlowerInfoService {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public Flowerxinxi getFlowerById(Integer id) {
String cacheKey = "flower:" + id;
Flowerxinxi flower = (Flowerxinxi) redisTemplate.opsForValue().get(cacheKey);
if(flower == null) {
flower = flowerxinxiMapper.selectByPrimaryKey(id);
redisTemplate.opsForValue().set(cacheKey, flower, Duration.ofHours(1));
}
return flower;
}
}
2. 微服务架构改造
将单体应用拆分为商品服务、订单服务、用户服务等微服务,提高系统可扩展性和维护性。使用Spring Cloud框架实现服务注册发现、配置管理和负载均衡。
3. 消息队列异步处理
引入RabbitMQ或Kafka处理高并发场景下的订单创建、库存扣减等操作,提升系统吞吐量:
@Component
public class OrderMessageProducer {
@Autowired
private AmqpTemplate rabbitTemplate;
public void sendCreateOrderMessage(OrderMessage message) {
rabbitTemplate.convertAndSend("order.exchange", "order.create", message);
}
}
4. 移动端适配与PWA技术
开发响应式前端界面,支持PWA(渐进式Web应用)技术,实现类似原生应用的体验,包括离线访问、消息推送等功能。
5. 智能推荐系统
基于用户行为数据构建推荐算法,实现个性化商品推荐:
@Service
public class RecommendationService {
public List<Flowerxinxi> getRecommendedFlowers(Integer userId) {
// 基于协同过滤算法实现推荐逻辑
return recommendationEngine.getRecommendations(userId);
}
}
总结
该鲜花电商平台通过SSM框架的合理运用,构建了稳定可靠的在线销售系统。数据库设计充分考虑了业务需求和数据一致性,核心功能实现完整且具有较好的扩展性。实体模型设计规范,代码结构清晰。未来通过引入缓存、微服务、消息队列等现代化技术,可以进一步提升系统性能和用户体验,为鲜花零售行业的数字化转型提供强有力的技术支撑。

系统的分层架构和模块化设计为后续功能扩展奠定了良好基础,规范的代码风格和完整的业务逻辑处理机制确保了平台的稳定运行。随着业务规模的扩大,建议逐步实施上述优化方案,构建更加智能、高效的鲜花电商生态系统。