在本次课程管理系统实训中我负责的是教师端的课程管理模块开发。从项目初始化到最终交付中间经历了不少曲折——依赖冲突、配置报错、前端请求跨域、MyBatis映射字段对不上……每一个问题都让我对Spring Boot开发有了更深的理解。一.技术选型与项目初始化1.1 为什么选这套技术栈项目要求实现一个课程管理系统包含教师端对学生课程信息的增删改查功能。考虑到开发效率和后续维护我选择了以下技术组合Spring BootMyBatisMySQLThymeleafjQueryMaven。选择Spring Boot的原因很简单约定优于配置能快速启动一个Web项目内置Tomcat省去部署麻烦。MyBatis-Plus则在原生MyBatis基础上提供了代码生成器和条件构造器能显著减少重复的CRUD代码编写。1.2 项目结构设计按照分层架构的思想我将项目划分为Controller只负责接收参数和返回结果Service处理业务逻辑Mapper负责数据持久化各层之间通过接口解耦。1.3 Maven依赖配置pom.xml的核心依赖如下二、配置文件详解2.1 application.properties核心配置2.2 几个关键配置的说明map-underscore-to-camel-casetrue这个配置开启了数据库字段名到Java属性的自动映射。比如数据库中的course_name字段会自动映射到实体类的courseName属性。如果不开启就需要在XML中为每个字段写别名非常麻烦。spring.thymeleaf.prefixclasspath:/static/这里我直接将Thymeleaf的模板路径指向了static目录而不是默认的templates目录。因为我的前端页面是纯HTMLJS用Thymeleaf只是为了获取后端传递的用户信息不需要服务端渲染整个页面。三、核心代码实现3.1 启动类配置MapperScan(“com.hlw.mapper”)告诉Spring去扫描这个包下的所有Mapper接口自动生成代理实现类省去了在每个Mapper类上单独加Mapper注解的麻烦。3.2 实体类设计Course实体对应t_course1表TableName(“t_course1”)指定实体类对应的数据库表名。因为我的表名不是默认的course所以要显式声明。TableId(type IdType.AUTO)标识主键字段并指定为自增类型。TableField当实体类属性名和数据库字段名不一致时使用。比如teacherName对应数据库的teachername。StudentCourse实体对应sc关联表这个实体用于记录学生选课关系为后续查看某门课选了哪些学生做准备。3.3 Mapper层实现对应的XML映射文件CourseMapper.xml标签会自动处理多余的AND或OR比如三个条件都不满足时生成的SQL就是select * from t_course1不会有多余的where关键字。标签同样会智能处理多余的逗号。在updateCourseByAid中如果只传了courseName生成的SQL是update t_course1 set course_name #{courseName} where course_id #{courseId}不会有多余的逗号。3.4 Service层实现接口定义实现类Service注解告诉Spring这是一个Service BeanAutowired自动注入Mapper实例。这一层目前只是简单调用了Mapper方法没有复杂的业务逻辑。如果将来需要增加权限校验、数据格式转换等操作在Service层处理会非常方便。3.5 Controller层实现教师页面控制器这个Controller负责渲染教师主页。权限控制逻辑从Session中获取登录用户如果不存在或角色不是教师则重定向到登录页。这样即使有人直接在浏览器输入/teacher地址也无法绕过登录验证。课程管理API控制器RestController是Controller和ResponseBody的组合表示这个类中的方法返回值直接作为HTTP响应体JSON格式而不是跳转页面。需要注意的点RequestBody将前端传来的JSON自动映射为Course对象。requiredfalse表示这个参数可以为空这样在查询时可以不传任何条件返回所有课程。每个方法都返回统一的Result对象前端可以统一处理成功/失败状态。3.6 统一返回结果封装这个设计参考了前后端分离项目中常见的统一响应模式。前端可以通过data.code 200判断请求是否成功而不必依赖HTTP状态码。枚举类ResultCode集中管理所有状态码方便后期维护和扩展。四、前端页面实现4.1 teacher.html设计教师主页是一个课程管理面板包含搜索表单、课程列表表格、添加/删除/查看操作按钮。核心JavaScript逻辑删除功能这里使用了事件委托的方式绑定点击事件——父容器监听子元素的点击事件即使动态生成的按钮也能正常响应。五、项目启动与测试确保MySQL服务已启动数据库studentclass已创建执行mvn clean install打包运行App.java的main方法浏览器访问http://localhost:9999/teacher如果一切正常将看到教师课程管理页面点击查询课程即可加载所有课程数据。