Java宠物管理系统项目实战:从零开始构建完整CRUD功能与数据库设计
在当今数字化转型加速的时代,宠物经济蓬勃发展,越来越多的宠物店、宠物医院和家庭用户对宠物信息管理提出了更高要求。为了满足这一需求,我们以Java技术栈为核心,结合Spring Boot、MyBatis、MySQL等主流框架,开发一套完整的宠物管理系统。本文将详细讲解如何从需求分析到系统部署落地,实现一个具备增删改查(CRUD)、数据持久化、用户权限控制等功能的实用项目。
一、项目背景与目标
随着养宠人群不断扩大,宠物管理变得越来越复杂。传统的纸质记录方式效率低下且易出错,因此需要一个结构化的电子化系统来统一管理宠物的基本信息(如品种、年龄、健康状况)、主人信息、就诊记录、疫苗接种情况等。本项目旨在:
- 提供简洁高效的宠物信息录入与查询界面;
- 支持多角色权限控制(管理员/普通用户);
- 确保数据安全性和一致性;
- 为后续扩展(如预约挂号、在线商城)打下基础。
二、技术选型与架构设计
在技术层面,我们选择以下组合:
- 后端框架:Spring Boot(快速搭建微服务环境,简化配置);
- ORM框架:MyBatis(灵活SQL操作,适合复杂业务逻辑);
- 数据库:MySQL(成熟稳定,兼容性强);
- 前端技术:HTML + CSS + JavaScript + Bootstrap(轻量级响应式布局);
- 开发工具:IntelliJ IDEA(高效编码)、Postman(API测试);
- 版本控制:Git(团队协作必备)。
整体架构采用分层模式:
- 表现层(View):负责页面渲染与用户交互;
- 控制层(Controller):接收请求并调用Service处理;
- 业务逻辑层(Service):封装核心逻辑,如宠物登记、查询条件过滤;
- 数据访问层(DAO/Repository):与数据库交互,执行CRUD操作;
- 数据库层(MySQL):存储所有实体数据。
三、数据库设计详解
合理的数据库设计是整个系统的基石。根据需求,我们设计了以下几个核心表:
1. 宠物信息表(pet_info)
CREATE TABLE pet_info (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
species VARCHAR(30),
breed VARCHAR(50),
age INT,
gender ENUM('Male', 'Female'),
weight DECIMAL(5,2),
owner_id BIGINT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
2. 主人信息表(owner_info)
CREATE TABLE owner_info (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
phone VARCHAR(15),
email VARCHAR(50),
address TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
3. 就诊记录表(medical_record)
CREATE TABLE medical_record (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
pet_id BIGINT,
diagnosis TEXT,
treatment TEXT,
visit_date DATE,
doctor_name VARCHAR(50),
cost DECIMAL(10,2),
FOREIGN KEY (pet_id) REFERENCES pet_info(id)
);
通过外键关联,确保数据完整性。例如,每个宠物都有唯一的主人ID,每条就诊记录都绑定到某只宠物。
四、后端开发流程详解
1. 创建Spring Boot项目
使用Spring Initializr生成基础项目结构,勾选Web、MyBatis、MySQL驱动依赖。目录结构如下:
src/main/java/com/example/petmanagement/ ├── controller/ ├── service/ ├── dao/ ├── entity/ ├── config/ └── PetManagementApplication.java
2. 实体类定义(Entity Layer)
创建对应数据库表的Java对象,使用Lombok减少样板代码:
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Pet {
private Long id;
private String name;
private String species;
private String breed;
private Integer age;
private String gender;
private BigDecimal weight;
private Long ownerId;
}
3. DAO接口编写(Data Access Object)
使用MyBatis注解或XML映射文件实现数据库操作:
@Mapper
public interface PetDao {
@Select("SELECT * FROM pet_info WHERE id = #{id}")
Pet findById(Long id);
@Insert("INSERT INTO pet_info(name, species, breed, age, gender, weight, owner_id) VALUES(#{name}, #{species}, #{breed}, #{age}, #{gender}, #{weight}, #{ownerId})")
void insert(Pet pet);
@Update("UPDATE pet_info SET name=#{name}, species=#{species}, breed=#{breed}, age=#{age}, gender=#{gender}, weight=#{weight} WHERE id=#{id}")
void update(Pet pet);
@Delete("DELETE FROM pet_info WHERE id=#{id}")
void deleteById(Long id);
@Select("SELECT * FROM pet_info")
List findAll();
}
4. Service层实现业务逻辑
Service层负责协调DAO与Controller之间的数据流转,并加入事务管理:
@Service
@Transactional
public class PetService {
@Autowired
private PetDao petDao;
public List getAllPets() {
return petDao.findAll();
}
public Pet getPetById(Long id) {
return petDao.findById(id);
}
public void addPet(Pet pet) {
petDao.insert(pet);
}
public void updatePet(Pet pet) {
petDao.update(pet);
}
public void deletePet(Long id) {
petDao.deleteById(id);
}
}
5. Controller层暴露REST API
提供JSON格式的数据接口供前端调用:
@RestController
@RequestMapping("/api/pets")
public class PetController {
@Autowired
private PetService petService;
@GetMapping
public ResponseEntity> getAllPets() {
return ResponseEntity.ok(petService.getAllPets());
}
@GetMapping("/{id}")
public ResponseEntity getPetById(@PathVariable Long id) {
Pet pet = petService.getPetById(id);
return pet != null ? ResponseEntity.ok(pet) : ResponseEntity.notFound().build();
}
@PostMapping
public ResponseEntity addPet(@RequestBody Pet pet) {
petService.addPet(pet);
return ResponseEntity.status(HttpStatus.CREATED).build();
}
@PutMapping
public ResponseEntity updatePet(@RequestBody Pet pet) {
petService.updatePet(pet);
return ResponseEntity.ok().build();
}
@DeleteMapping("/{id}")
public ResponseEntity deletePet(@PathVariable Long id) {
petService.deletePet(id);
return ResponseEntity.noContent().build();
}
}
五、前端页面开发(Vue.js可选)
虽然原题未强制要求前端框架,但为增强实用性,建议使用简单的HTML+JS完成基础页面。例如:
宠物管理系统
宠物列表
ID 姓名 种类 年龄 操作
六、测试与调试策略
为保障系统质量,应建立多层次测试机制:
- 单元测试:使用JUnit对Service方法进行断言验证;
- 集成测试:通过Postman模拟HTTP请求,验证API是否正确响应;
- UI测试:手动点击按钮检查前端交互是否符合预期;
- 日志监控:开启Spring Boot的日志输出,便于排查运行时错误。
七、部署上线与优化建议
当本地开发完成后,可通过以下步骤部署至服务器:
- 打包成JAR文件:mvn clean package;
- 上传至Linux服务器;
- 启动应用:java -jar pet-management.jar;
- 配置Nginx反向代理(若需域名访问);
- 设置定时备份数据库(防止数据丢失)。
未来可考虑的优化方向包括:
- 引入JWT实现无状态认证;
- 使用Redis缓存热门宠物数据提升性能;
- 接入短信通知服务实现宠物体检提醒;
- 增加Excel导入导出功能方便批量操作。
结语
通过本次Java宠物管理系统项目实战,不仅掌握了Spring Boot + MyBatis + MySQL的技术组合,还深入理解了软件工程中从需求分析到部署上线的全流程。该项目既适合作为毕业设计或课程作业,也可作为小型创业项目的原型。只要持续迭代优化,就能逐步演变为真正可用的企业级应用。

