这个前后端分离的在线互动学习系统采用SpringBoot+Vue+MyBatis+MySQL技术栈实现,是一个功能完整的教育类Web应用。系统实现了课程管理、在线学习、互动交流等核心功能模块,特别适合中小型教育机构或教师个人搭建专属在线教学平台。
我在实际开发过程中发现,采用前后端分离架构能显著提升开发效率和系统可维护性。前端使用Vue.js构建响应式界面,后端SpringBoot提供RESTful API,MyBatis作为ORM框架操作MySQL数据库,这种技术组合在当前企业级应用中非常流行且成熟。
前端采用Vue 2.x版本构建,主要基于以下考虑:
实测发现,Vue的响应式特性特别适合需要频繁更新视图的互动学习场景。比如当学生提交作业后,教师端能实时看到新提交内容,无需手动刷新页面。
后端选用SpringBoot 2.5.x版本,主要优势包括:
数据库使用MySQL 8.0,考虑到:
系统包含三类用户角色:
用户表设计关键字段:
sql复制CREATE TABLE `user` (
`id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(100) NOT NULL,
`real_name` varchar(50) DEFAULT NULL,
`avatar` varchar(255) DEFAULT NULL,
`role` enum('admin','teacher','student') NOT NULL,
`status` tinyint NOT NULL DEFAULT '1',
`create_time` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
密码存储采用BCrypt加密,这是目前最推荐的方式:
java复制@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
课程是系统的核心实体,主要包含:
后端API设计遵循RESTful规范:
code复制GET /api/courses - 获取课程列表
POST /api/courses - 创建新课程
GET /api/courses/{id} - 获取课程详情
PUT /api/courses/{id} - 更新课程
DELETE /api/courses/{id} - 删除课程
前端使用Vue Router实现页面导航:
javascript复制const routes = [
{
path: '/courses',
component: CourseList,
meta: { requiresAuth: true }
},
{
path: '/courses/:id',
component: CourseDetail,
meta: { requiresAuth: true }
}
]
系统实现了两种互动方式:
实时功能采用WebSocket实现,关键代码:
java复制@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").withSockJS();
}
}
前端使用SockJS客户端连接:
javascript复制const socket = new SockJS('/ws');
const stompClient = Stomp.over(socket);
stompClient.connect({}, () => {
stompClient.subscribe('/topic/messages', (message) => {
// 处理收到的消息
});
});
推荐使用Docker快速搭建MySQL:
bash复制docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:8.0
bash复制mvn clean package
bash复制java -jar target/learning-system-0.0.1-SNAPSHOT.jar
生产环境建议:
bash复制npm run build
nginx复制server {
listen 80;
server_name yourdomain.com;
location / {
root /path/to/dist;
try_files $uri $uri/ /index.html;
}
location /api {
proxy_pass http://localhost:8080;
}
}
开发环境下常见跨域问题,解决方案:
后端配置CORS:
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*");
}
}
或者使用注解方式:
java复制@CrossOrigin(origins = "*")
@RestController
@RequestMapping("/api")
public class ApiController {
// ...
}
SpringBoot默认文件上传限制为1MB,需要调整:
properties复制# application.properties
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
前端上传组件示例:
vue复制<template>
<el-upload
action="/api/upload"
:before-upload="beforeUpload"
:on-success="handleSuccess">
<el-button type="primary">点击上传</el-button>
</el-upload>
</template>
<script>
export default {
methods: {
beforeUpload(file) {
const isLt10M = file.size / 1024 / 1024 < 10;
if (!isLt10M) {
this.$message.error('文件大小不能超过10MB!');
}
return isLt10M;
}
}
}
</script>
数据库优化:
前端优化:
缓存策略:
基于现有系统,可以考虑以下扩展:
移动端适配:
直播功能集成:
数据分析模块:
微服务改造:
实际开发中,我发现Element UI的按需引入能显著减小打包体积。通过babel-plugin-component配置,最终打包的vendor.js从2MB减少到800KB左右,这对教育类网站的用户体验提升很明显。