1. 项目概述
这个汉服租赁网站系统采用了当前主流的前后端分离架构,前端使用Vue.js框架,后端基于SpringBoot+MyBatis技术栈,数据库选用MySQL。系统主要面向高校学生群体,提供汉服在线租赁服务,包含用户管理、服装展示、订单处理、支付对接等完整功能模块。
我在实际开发中发现,这种技术组合特别适合中小型电商类项目的快速开发。SpringBoot提供了完善的Web开发支持,Vue.js让前端交互更加流畅,而MyBatis则简化了数据库操作。整套系统代码结构清晰,模块划分合理,即使是刚接触这些技术的新手也能较快上手。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 前端技术选型
前端采用Vue 2.x版本构建,主要考虑因素包括:
- 组件化开发模式便于功能模块复用
- 响应式数据绑定简化了状态管理
- 丰富的生态系统(Vue Router、Vuex等)
- 相对平缓的学习曲线适合学生开发者
实际开发中,我们使用了以下关键技术点:
- Element UI组件库构建管理后台界面
- Axios处理HTTP请求
- Vue Router实现前端路由
- Vuex进行状态管理
- Webpack打包工具
2.2 后端技术栈
后端采用SpringBoot 2.x系列,主要优势在于:
- 自动配置减少了大量样板代码
- 内嵌Tomcat简化部署
- 完善的starter依赖管理
- 与MyBatis无缝集成
核心功能模块包括:
- Spring Security实现权限控制
- MyBatis持久层框架
- Redis缓存提升性能
- Swagger生成API文档
- 阿里云OSS存储图片资源
3. 数据库设计
3.1 主要表结构
系统数据库包含以下核心表:
- 用户表(user):存储用户基本信息
- 汉服表(hanfu):记录服装详情
- 订单表(order):管理租赁交易
- 评价表(comment):用户反馈
- 分类表(category):服装分类管理
3.2 关键字段设计
以汉服表为例,主要字段包括:
- id:主键
- name:服装名称
- description:详细描述
- price:租赁价格
- stock:库存数量
- status:状态(上架/下架)
- create_time:创建时间
- update_time:更新时间
注意:所有表都添加了逻辑删除标志位(del_flag),避免物理删除数据。
4. 核心功能实现
4.1 用户认证模块
采用JWT实现无状态认证,关键流程:
- 用户登录成功后生成token
- 前端存储token在localStorage
- 后续请求携带token在header
- 服务端验证token有效性
java复制// JWT工具类示例
public class JwtUtil {
private static final String SECRET = "your-secret-key";
private static final long EXPIRATION = 86400000; // 24小时
public static String generateToken(UserDetails userDetails) {
return Jwts.builder()
.setSubject(userDetails.getUsername())
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATION))
.signWith(SignatureAlgorithm.HS512, SECRET)
.compact();
}
}
4.2 汉服展示与搜索
前端实现要点:
- 使用Element UI的分页组件
- 图片懒加载优化性能
- 多条件组合查询接口
- 分类树形展示
后端接口设计:
java复制@GetMapping("/hanfu/list")
public Result listHanfu(
@RequestParam(required = false) String name,
@RequestParam(required = false) Integer categoryId,
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<Hanfu> list = hanfuService.selectHanfuList(name, categoryId);
PageInfo<Hanfu> pageInfo = new PageInfo<>(list);
return Result.success(pageInfo);
}
5. 部署教程
5.1 环境准备
需要安装以下软件:
- JDK 1.8+
- MySQL 5.7+
- Node.js 12+
- Maven 3.6+
- Redis(可选)
5.2 后端部署步骤
- 导入SQL脚本初始化数据库
- 修改application.yml配置数据库连接
- 打包项目:
mvn clean package - 运行jar包:
java -jar target/hanfu-rental.jar
5.3 前端部署流程
- 安装依赖:
npm install - 开发环境运行:
npm run dev - 生产环境打包:
npm run build - 部署到Nginx:
nginx复制server {
listen 80;
server_name your-domain.com;
location / {
root /path/to/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://localhost:8080;
}
}
6. 常见问题与解决方案
6.1 跨域问题
开发环境下常见跨域错误,解决方案:
- 后端配置CORS
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*");
}
}
- 前端配置代理(vue.config.js)
javascript复制module.exports = {
devServer: {
proxy: {
'/api': {
target: 'http://localhost:8080',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
}
}
}
6.2 图片上传问题
推荐使用云存储服务(如阿里云OSS):
- 后端实现签名接口
- 前端直接上传到OSS
- 只保存图片URL到数据库
关键代码示例:
java复制public String getOssPolicy() {
// 生成OSS上传策略
long expireTime = 30;
long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
Date expiration = new Date(expireEndTime);
// 设置上传策略
PolicyConditions policyConds = new PolicyConditions();
policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 104857600);
policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, "hanfu/");
String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);
byte[] binaryData = postPolicy.getBytes("utf-8");
String encodedPolicy = BinaryUtil.toBase64String(binaryData);
String postSignature = ossClient.calculatePostSignature(postPolicy);
// 返回前端需要的参数
Map<String, String> respMap = new LinkedHashMap<>();
respMap.put("accessid", accessKeyId);
respMap.put("policy", encodedPolicy);
respMap.put("signature", postSignature);
respMap.put("dir", "hanfu/");
respMap.put("host", "https://your-bucket.oss-cn-hangzhou.aliyuncs.com");
respMap.put("expire", String.valueOf(expireEndTime / 1000));
return JSON.toJSONString(respMap);
}
7. 项目优化建议
7.1 性能优化
- 使用Redis缓存热门汉服数据
- 实现CDN加速静态资源
- 数据库查询优化(添加索引)
- 前端启用Gzip压缩
7.2 功能扩展
- 增加社交分享功能
- 实现智能推荐算法
- 添加会员积分系统
- 开发微信小程序版本
在实际部署过程中,我发现Nginx的配置对前端路由特别重要。如果忘记配置try_files $uri $uri/ /index.html,刷新页面时会出现404错误。另外,SpringBoot的配置文件要根据不同环境(dev/test/prod)进行区分,避免开发配置泄露到生产环境。
