"爪友"宠物社交小程序是我在完成计算机专业毕业设计时开发的一个综合性项目。作为一名资深宠物爱好者,我注意到身边许多养宠朋友都面临着社交圈狭窄、养宠知识获取困难、宠物服务信息不对称等问题。根据《2022年中国宠物行业白皮书》显示,国内城镇宠物主数量已突破7000万,但专门针对宠物主的垂直社交平台却寥寥无几。
这个项目采用Java技术栈开发,前端使用微信小程序,后端基于Spring Boot框架,数据库选用MySQL 8.0。系统实现了宠物档案管理、社交互动、商城购物、领养服务等核心功能模块,旨在为宠物主打造一个集记录、分享、服务于一体的综合性平台。
提示:项目开发环境建议使用IntelliJ IDEA + MySQL 8.0 + JDK 1.8组合,这是目前Java生态中最稳定高效的开发环境配置。
后端框架选择Spring Boot 2.7.x版本,主要基于以下考虑:
数据库选用MySQL 8.0而非5.7版本,主要因为:
前端采用微信小程序而非原生App,优势在于:
系统采用经典的三层架构设计:
code复制表现层(Web)
↓
业务逻辑层(Service)
↓
数据访问层(DAO)
↓
数据库(MySQL)
关键类设计示例:
sql复制CREATE TABLE `pet_info` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint NOT NULL COMMENT '所属用户ID',
`pet_name` varchar(50) NOT NULL COMMENT '宠物名称',
`pet_type` varchar(20) NOT NULL COMMENT '宠物类型',
`birthday` date DEFAULT NULL COMMENT '出生日期',
`gender` tinyint DEFAULT '0' COMMENT '性别:0未知 1公 2母',
`weight` decimal(5,2) DEFAULT NULL COMMENT '体重(kg)',
`avatar` varchar(255) DEFAULT NULL COMMENT '头像URL',
`health_status` varchar(20) DEFAULT '健康' COMMENT '健康状况',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
宠物信息添加流程:
/api/pet/add注意:图片上传需限制文件大小(建议<2MB)和类型(jpg/png),防止恶意上传。
核心代码片段:
java复制@PostMapping("/post/create")
public Result createPost(@RequestBody PostDTO postDTO) {
// 1. 参数校验
if (StringUtils.isBlank(postDTO.getContent())) {
return Result.fail("内容不能为空");
}
// 2. 构建实体
Post post = new Post();
BeanUtils.copyProperties(postDTO, post);
post.setUserId(SecurityUtils.getCurrentUserId());
// 3. 处理图片
if (CollectionUtils.isNotEmpty(postDTO.getImages())) {
List<String> imageUrls = ossService.uploadBatch(postDTO.getImages());
post.setImages(JSON.toJSONString(imageUrls));
}
// 4. 保存到数据库
postMapper.insert(post);
// 5. 异步处理(如通知粉丝)
eventPublisher.publishEvent(new PostEvent(post));
return Result.success(post.getId());
}
sql复制SELECT * FROM post
WHERE user_id = #{userId}
ORDER BY create_time DESC
LIMIT #{offset}, #{pageSize}
java复制// 获取周榜热帖
public List<Post> getWeeklyHotPosts() {
String cacheKey = "post:weekly_hot";
List<Post> cached = redisTemplate.opsForValue().get(cacheKey);
if (cached != null) {
return cached;
}
List<Post> posts = postMapper.selectWeeklyHot();
redisTemplate.opsForValue().set(cacheKey, posts, 1, TimeUnit.HOURS);
return posts;
}
数据库表结构:
sql复制CREATE TABLE `cart_item` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint NOT NULL,
`product_id` bigint NOT NULL,
`quantity` int NOT NULL DEFAULT '1',
`selected` tinyint NOT NULL DEFAULT '1' COMMENT '是否选中',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_product` (`user_id`,`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
使用状态模式实现订单流程:
java复制public interface OrderState {
void pay(Order order);
void deliver(Order order);
void receive(Order order);
void cancel(Order order);
}
// 具体状态实现
public class UnpaidState implements OrderState {
@Override
public void pay(Order order) {
order.setState(new PaidState());
// 更新数据库...
}
@Override
public void cancel(Order order) {
order.setState(new CancelledState());
// 释放库存...
}
}
sql复制CREATE TABLE `adoption_info` (
`id` bigint NOT NULL AUTO_INCREMENT,
`pet_name` varchar(50) NOT NULL,
`pet_type` varchar(20) NOT NULL,
`age` int DEFAULT NULL COMMENT '月龄',
`gender` tinyint DEFAULT NULL,
`health_status` varchar(20) DEFAULT NULL,
`description` varchar(500) DEFAULT NULL,
`address` varchar(100) NOT NULL,
`contact_way` varchar(50) NOT NULL,
`status` tinyint NOT NULL DEFAULT '0' COMMENT '0-待审核 1-已发布 2-已领养',
`creator_id` bigint NOT NULL,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
最低配置要求:
推荐使用Docker Compose部署:
yaml复制version: '3'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: yourpassword
volumes:
- ./mysql-data:/var/lib/mysql
ports:
- "3306:3306"
redis:
image: redis:6
ports:
- "6379:6379"
app:
build: .
ports:
- "8080:8080"
depends_on:
- mysql
- redis
在实际开发过程中,有几个关键点值得特别注意:
微信支付集成:需要仔细阅读官方文档,特别注意签名生成和验签流程。建议使用官方SDK而非自行实现。
敏感数据处理:用户手机号等隐私信息应当加密存储,推荐使用AES等对称加密算法。
性能监控:生产环境建议集成Prometheus + Grafana监控系统关键指标。
后续改进方向:
这个项目从需求分析到最终上线历时4个月,让我对全栈开发有了更深入的理解。最大的收获是学会了如何在技术选型时权衡各种因素,以及如何处理实际开发中遇到的各种边界情况。