SpringBoot+Vue3+MyBatis毕业论文管理系统开发实践
2026/9/23 7:14:31 网站建设 项目流程

1. 毕业论文管理系统架构解析

这个基于SpringBoot+Vue3+MyBatis的毕业论文管理系统,采用了经典的前后端分离架构。前端使用Vue3组合式API开发,后端基于SpringBoot框架,数据持久层采用MyBatis,数据库选用MySQL。这种技术栈组合在当前企业级应用中非常主流,既能保证开发效率,又能满足性能需求。

提示:前后端分离架构的核心优势在于解耦,前后端可以并行开发,通过API接口进行数据交互,大大提升了开发效率。

系统主要包含三大模块:

  1. 用户管理模块:处理学生、导师和管理员的注册、登录和权限控制
  2. 论文流程模块:管理选题、开题、中期检查、答辩等全流程
  3. 文件管理模块:处理论文文档的上传、下载和版本控制

2. 数据库设计与实现

2.1 核心表结构设计

系统设计了三个核心数据表来支撑业务流程:

用户信息表(user_info)

CREATE TABLE `user_info` ( `user_id` bigint NOT NULL AUTO_INCREMENT, `user_name` varchar(50) DEFAULT NULL, `user_account` varchar(30) NOT NULL, `user_password` varchar(80) NOT NULL, `user_role` tinyint NOT NULL COMMENT '1学生,2导师,3管理员', `user_email` varchar(50) DEFAULT NULL, `create_time` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`user_id`), UNIQUE KEY `idx_account` (`user_account`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

论文选题表(thesis_topic)

CREATE TABLE `thesis_topic` ( `topic_id` bigint NOT NULL AUTO_INCREMENT, `student_id` bigint NOT NULL, `supervisor_id` bigint NOT NULL, `topic_title` varchar(100) NOT NULL, `topic_desc` text, `topic_status` tinyint DEFAULT '0' COMMENT '0待审核,1通过,2驳回', `submit_time` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`topic_id`), KEY `idx_student` (`student_id`), KEY `idx_supervisor` (`supervisor_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2.2 MyBatis映射配置

在MyBatis中,我们使用注解和XML两种方式配置映射。以下是用户Mapper的示例:

@Mapper public interface UserMapper { @Select("SELECT * FROM user_info WHERE user_id = #{userId}") User getUserById(@Param("userId") Long userId); @Insert("INSERT INTO user_info(user_name, user_account, user_password, user_role, user_email) " + "VALUES(#{userName}, #{userAccount}, #{userPassword}, #{userRole}, #{userEmail})") @Options(useGeneratedKeys = true, keyProperty = "userId") int insertUser(User user); @Update("UPDATE user_info SET user_password = #{newPassword} WHERE user_id = #{userId}") int updatePassword(@Param("userId") Long userId, @Param("newPassword") String newPassword); }

3. SpringBoot后端实现

3.1 项目结构

标准的SpringBoot项目结构如下:

src/main/java ├── com.example.thesis │ ├── config # 配置类 │ ├── controller # 控制器 │ ├── service # 业务服务 │ ├── dao # 数据访问层 │ ├── entity # 实体类 │ ├── dto # 数据传输对象 │ ├── vo # 视图对象 │ └── util # 工具类 src/main/resources ├── application.yml # 应用配置 ├── static # 静态资源 └── templates # 模板文件

3.2 核心控制器实现

论文选题控制器的实现示例:

@RestController @RequestMapping("/api/topic") public class TopicController { @Autowired private TopicService topicService; @PostMapping("/submit") public Result submitTopic(@RequestBody TopicSubmitDTO dto) { return topicService.submitTopic(dto); } @GetMapping("/list") public Result getTopicList(@RequestParam(required = false) Integer status) { return topicService.getTopicList(status); } @PostMapping("/review") public Result reviewTopic(@RequestBody TopicReviewDTO dto) { return topicService.reviewTopic(dto); } }

4. Vue3前端实现

4.1 前端项目结构

src/ ├── api/ # API请求 ├── assets/ # 静态资源 ├── components/ # 公共组件 ├── composables/ # 组合式函数 ├── router/ # 路由配置 ├── stores/ # 状态管理 ├── styles/ # 全局样式 ├── utils/ # 工具函数 └── views/ # 页面组件

4.2 论文选题页面实现

使用Vue3的组合式API实现论文选题页面:

<script setup> import { ref, onMounted } from 'vue' import { useTopicStore } from '@/stores/topic' import { ElMessage } from 'element-plus' const topicStore = useTopicStore() const form = ref({ title: '', description: '', supervisorId: null }) const supervisors = ref([]) onMounted(async () => { await topicStore.fetchSupervisors() supervisors.value = topicStore.supervisors }) const submitTopic = async () => { try { await topicStore.submitTopic(form.value) ElMessage.success('选题提交成功') } catch (error) { ElMessage.error(error.message) } } </script> <template> <div class="topic-container"> <el-form :model="form" label-width="120px"> <el-form-item label="论文题目" required> <el-input v-model="form.title" /> </el-form-item> <el-form-item label="导师选择" required> <el-select v-model="form.supervisorId" placeholder="请选择导师"> <el-option v-for="supervisor in supervisors" :key="supervisor.userId" :label="supervisor.userName" :value="supervisor.userId" /> </el-select> </el-form-item> <el-form-item label="选题描述"> <el-input v-model="form.description" type="textarea" rows="5" /> </el-form-item> <el-form-item> <el-button type="primary" @click="submitTopic">提交选题</el-button> </el-form-item> </el-form> </div> </template>

5. 系统部署与运维

5.1 后端部署

SpringBoot应用支持多种部署方式:

  1. 打包为可执行JAR:
mvn clean package java -jar target/thesis-system-0.0.1-SNAPSHOT.jar
  1. 使用Docker容器化部署:
FROM openjdk:17-jdk-slim COPY target/thesis-system-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"]

5.2 前端部署

Vue3项目部署步骤:

  1. 构建生产环境代码:
npm run build
  1. 配置Nginx:
server { listen 80; server_name thesis.example.com; location / { root /var/www/thesis-frontend/dist; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://backend:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

6. 常见问题与解决方案

6.1 跨域问题

前后端分离开发时常见的跨域问题解决方案:

  1. 后端配置CORS:
@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("GET", "POST", "PUT", "DELETE") .allowedHeaders("*") .maxAge(3600); } }
  1. 前端配置代理(开发环境):
// vite.config.js export default defineConfig({ server: { proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, '') } } } })

6.2 文件上传大小限制

SpringBoot默认文件上传大小限制为1MB,需要调整:

# application.yml spring: servlet: multipart: max-file-size: 10MB max-request-size: 10MB

6.3 数据库连接池配置

优化数据库连接池配置:

spring: datasource: url: jdbc:mysql://localhost:3306/thesis_db?useSSL=false&serverTimezone=UTC username: root password: password hikari: maximum-pool-size: 20 minimum-idle: 5 idle-timeout: 30000 max-lifetime: 1800000 connection-timeout: 30000

7. 系统安全考虑

7.1 密码加密存储

使用BCryptPasswordEncoder进行密码加密:

@Configuration public class SecurityConfig { @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }

7.2 JWT认证实现

基于Spring Security的JWT认证流程:

  1. 登录接口生成Token:
public String generateToken(UserDetails userDetails) { Map<String, Object> claims = new HashMap<>(); return Jwts.builder() .setClaims(claims) .setSubject(userDetails.getUsername()) .setIssuedAt(new Date(System.currentTimeMillis())) .setExpiration(new Date(System.currentTimeMillis() + JWT_TOKEN_VALIDITY * 1000)) .signWith(SignatureAlgorithm.HS512, secret) .compact(); }
  1. 配置Spring Security:
@EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers("/api/auth/**").permitAll() .anyRequest().authenticated() .and() .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS); http.addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class); return http.build(); } }

8. 性能优化建议

8.1 数据库查询优化

  1. 添加合适的索引:
ALTER TABLE thesis_progress ADD INDEX idx_topic_student (topic_id, student_id);
  1. 使用MyBatis二级缓存:
<cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>

8.2 前端性能优化

  1. 按需加载组件:
const UserManagement = defineAsyncComponent(() => import('./views/UserManagement.vue') )
  1. 使用虚拟滚动优化长列表:
<el-table-v2 :columns="columns" :data="data" :width="800" :height="400" :row-height="50" />

9. 扩展功能建议

9.1 论文查重集成

可以考虑集成第三方查重API:

public class PlagiarismCheckService { public CheckResult checkPlagiarism(MultipartFile file) { // 调用第三方API // 返回查重结果 } }

9.2 消息通知系统

使用WebSocket实现实时通知:

@Controller public class NotificationController { @Autowired private SimpMessagingTemplate messagingTemplate; public void sendNotification(Long userId, String message) { messagingTemplate.convertAndSendToUser( userId.toString(), "/queue/notifications", new Notification(message) ); } }

10. 项目总结与反思

在实际开发过程中,有几个关键点值得注意:

  1. 前后端接口定义要提前协商好,建议使用Swagger或OpenAPI规范文档
  2. 数据库设计要考虑扩展性,特别是状态字段要预留足够的取值空间
  3. 文件上传要考虑分布式存储方案,避免单机存储容量限制
  4. 权限控制要细致,不同角色对同一接口可能有不同的访问权限

这个系统从技术选型到实现都采用了当前主流的技术栈,既保证了开发效率,又能满足高校毕业论文管理的实际需求。通过这个项目,可以完整地实践前后端分离开发的全流程,对提升全栈开发能力有很大帮助。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询