基于Spring Boot和Vue.js的流浪动物救助系统
后端框架Spring Boot
Spring Boot简化了使用Spring框架构建应用的过程,通过预设配置减少了开发者的工作量。它支持内嵌服务器如Tomcat、Jetty等,让Web应用部署更加简便。
前端框架Vue.js
Vue.js是一款高效的JavaScript框架,利用虚拟DOM技术提高了UI更新效率。其响应式数据绑定特性使得当数据发生变化时,界面能够自动更新。
持久层框架MyBatis
MyBatis是一个开源的持久层框架,实现了Java对象与数据库表之间的映射,减少了手动编写SQL语句的需求。它还支持动态SQL生成,增强了查询灵活性。
代码示例
<!-- 忽略权限验证 -->
@NoAuth
@PostMapping("/signin")
public Response signIn(String user, String pwd, HttpServletRequest req) {
UserEntity userInfo = userService.getUserByName(user);
if(userInfo == null || !userInfo.getPassword().equals(pwd)) {
return Response.error("用户名或密码错误");
}
String authToken = tokenService.createAuthToken(userInfo.getId(), user, "user", userInfo.getRole());
return Response.ok().addData("authToken", authToken);
}
@Override
public String createAuthToken(Long userId, String userName, String table, String role) {
AuthToken existingToken = this.getTokenByUserId(userId, role);
String newToken = UUID.randomUUID().toString();
Calendar expiryTime = Calendar.getInstance();
expiryTime.add(Calendar.HOUR, 1);
if(existingToken != null) {
existingToken.setToken(newToken);
existingToken.setExpireAt(expiryTime.getTime());
this.updateToken(existingToken);
} else {
this.saveNewToken(new AuthToken(userId, userName, table, role, newToken, expiryTime.getTime()));
}
return newToken;
}
数据库设计
DROP TABLE IF EXISTS `address`; CREATE TABLE `address` ( `id` BIGINT AUTO_INCREMENT, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `user_id` BIGINT NOT NULL, `location` VARCHAR(200) NOT NULL, `receiver_name` VARCHAR(200) NOT NULL, `phone_number` VARCHAR(200) NOT NULL, `is_default` VARCHAR(200) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB CHARSET=utf8 COMMENT='用户地址'; DROP TABLE IF EXISTS `forum_post`; CREATE TABLE `forum_post` ( `id` BIGINT AUTO_INCREMENT, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `title` VARCHAR(200), `content` TEXT NOT NULL, `parent_id` BIGINT, `user_id` BIGINT NOT NULL, `username` VARCHAR(200), `avatar_url` TEXT, `status` VARCHAR(200), `is_top` INT DEFAULT 0, `top_time` DATETIME, PRIMARY KEY (`id`) ) ENGINE=InnoDB CHARSET=utf8 COMMENT='论坛帖子'; DROP TABLE IF EXISTS `users`; CREATE TABLE `users` ( `id` BIGINT AUTO_INCREMENT, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `account` VARCHAR(200) NOT NULL, `password` VARCHAR(200) NOT NULL, `real_name` VARCHAR(200) NOT NULL, `gender` VARCHAR(200), `mobile` VARCHAR(200), `profile_pic` TEXT, `points` DOUBLE DEFAULT 0, `balance` DOUBLE DEFAULT 0, PRIMARY KEY (`id`), UNIQUE KEY `unique_account` (`account`) ) ENGINE=InnoDB CHARSET=utf8 COMMENT='用户信息';