目录
一、新建Springboot项目
New—>Project—>Spring Intializr—>package选择WAR—>然后选择Mysql,Mybatis, lombok, web
二、作业管理系统介绍
(一)功能及目录结构
1. 功能简介
本项目是一个简单的作业管理系统,采用Springboot+Mybatis+jsp+MySql+Maven的模式开发。使用Spring aop进行log输出。
主要实现教师和学生对于作业的增删改查功能。
具体功能如下图:
2. 项目目录结构
3.数据库表设计
(二)设计思路
1. 依赖与配置
配置文件(application.yml)
配置数据库和jsp的位置,同时可以修改访问端口。
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/school?serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
2. 具体实现
1.创建实体类——以教师为例
使用了lombok这个java库,使用了@Data注解,自动生成setter/getter、equals、canEqual、hashCode、toString方法。
@Data
public class Teacher {
private Long id;
private String name;
private Date create_time;
private Date update_time;
private String psw;
}
2.Mapper——全注解实现数据库的操作
在这里遇到了数据库语句的写法问题。
#和$是有区别的
mybatis 在对sql语句进行预编译之前,会对 sql 进行动态解析。
#{}预编译之后是一个占位符?
${}预编译以后直接是替换作用
所以update要用$,否则会报错。
/*
操作model
*/
@Mapper
public interface StudentHomeworkMapper {
/*
查看所有提交的作业
*/
@Select("SELECT * FROM s_student_homework")
List<StudentHomework> selectAll();
/*
教师提交成绩
*/
@Update("update s_student_homework set score=#{score},set_score_time=#{set_score_time} where id=#{id}")
void submitScore(StudentHomework sh);
/*
教师添加作业
*/
@Insert("INSERT INTO s_homework(id,title,content,create_time,total_score) VALUES " +
"(null,#{title},#{content},#{create_time},#{total_score})")
void addStudentHomework(Homework hw);
/*
提交作业StudentHomework
*/
@Insert("INSERT INTO s_student_homework(id,student_id,homework_id,homework_title,homework_content,create_time) " +
"values (null,#{student_id},#{homework_id},#{homework_title},#{homework_content},#{create_time})")
void submitHomework(StudentHomework sh) ;
/*
查看自已提交的作业
*/
@Select("SELECT * FROM s_student_homework where student_id=#{student_id}")
List<StudentHomework> selectMy(StudentHomework studentHomework);
/*
删除自己的作业Homework
*/
@Delete("delete from s_student_homework where id in (${ids})")
void deleteHomework(String ids) ;
/*
修改自己已提交的作业
*/
@Update("update s_student_homework set homework_title=#{homework_title},homework_content=#{homework_content},update_time=#{update_time} where id=#{id}")
void updateHomework(StudentHomework sh);
}
3.Service层
@Service
public class StudentHomeworkService {
@Autowired
private StudentHomeworkMapper mapper;
@Transactional
public List<StudentHomework> selectAll(){
return mapper.selectAll();
}
@Transactional
public void submitScore(StudentHomework s){
mapper.submitScore(s);
}
@Transactional
public void addStudentHomework(Homework h){
mapper.addStudentHomework(h);
}
@Transactional
public void submitHomework(StudentHomework studentHomework){
mapper.submitHomework(studentHomework);
}
@Transactional
public List<StudentHomework> selectMy(StudentHomework studentHomework){
return mapper.selectMy(studentHomework);
}
@Transactional
public void deleteHomework(String ids){
mapper.deleteHomework(ids);
}
@Transactional
public void updateHomework(StudentHomework studentHomework){
mapper.updateHomework(studentHomework);
}
}
4.Controller层
@Controller
public class teacherController {
@Autowired
private final StudentHomeworkService studentHomeworkService;
@Autowired
private final StudentService studentService;
@Autowired
private final HomeworkService homeworkService;
public teacherController(StudentHomeworkService studentHomeworkService, StudentService studentService, HomeworkService homeworkService) {
this.studentHomeworkService = studentHomeworkService;
this.studentService = studentService;
this.homeworkService = homeworkService;
}
/**
* 添加学生
* @param sh
* @return
*/
@RequestMapping(value = "AddStudentServlet",method = RequestMethod.POST)
public String addStudent(@ModelAttribute Student sh){
//获取当前时间
Timestamp now = new Timestamp(new Date().getTime());
sh.setCreate_time(now);
studentService.addStudent(sh);
return "redirect:/addStudent";
}
/**
* 添加作业
* @param sh
* @return
*/
@RequestMapping(value = "AddHomeworkServlet",method = RequestMethod.POST)
public String addHomework(@ModelAttribute Homework sh){
//获取当前时间
Timestamp now = new Timestamp(new Date().getTime());
sh.setCreate_time(now);
homeworkService.addStudentHomework(sh);
return "redirect:/addHomework";
}
/**
* 提交成绩
* @param sh
* @return
*/
@RequestMapping(value = "SubmitScore",method = RequestMethod.POST)
public String updateHomework(@ModelAttribute StudentHomework sh){
//获取当前时间
Timestamp now = new Timestamp(new Date().getTime());
sh.setSet_score_time(now);
studentHomeworkService.submitScore(sh);
return "redirect:/readHomework";
}
/**
* 查看所有作业与答案
* @param model
* @return
*/
@RequestMapping("/readHomework")
public String student(Model model) {
List<StudentHomework> list = studentHomeworkService.selectAll();
model.addAttribute("list",list);
return "/readHomework";
}
/**
* 查看所有老师发布的作业
* @param model
* @return
*/
@RequestMapping("/addHomework")
public String selectHomework(Model model) {
List<Homework> list = homeworkService.selectHomework();
model.addAttribute("list",list);
return "/addHomework";
}
/**
* 查看所有学生
* @param model
* @return
*/
@RequestMapping("/addStudent")
public String selectStudent(Model model) {
List<Student> list = studentService.selectStudent();
model.addAttribute("list",list);
return "/addStudent";
}
}
(三)功能演示
1、教师端
注册、登陆、查看所有学生的作业、打分、修改分数.
** 添加作业并且查看布置的作业**
添加学生并且查看学生列表。
2、学生端
注册、登陆、功能与教师端相似,不再展示。
提交作业、查看自己的作业
删除作业
修改作业
3、aop
三、运行中遇到的问题
- Jsp与Springboot出现404问题
解决方法:没有定义jsp目录位置 - 出现505问题
@responseBody可以替换为@ModelAttribute,传输类型问题 - @Delete(“delete from s_student_homework where id in (${ids})”)使用in的时候不能用#{}来获取参数
- Docker安装
因为Windows版本限制,而且没有使用过Linux,所以采用了Docker Toolbox下载地址来安装。
安装好后,打开Docker Quickstart Terminal,因为之前安装过Git,所以程序找不到,要在属性里面目标设置为本地的bash.exe位置。
运行中,又遇到了以下问题。
修改start.sh文件不可行。
最终解决的方法是:卸载掉默认装的VM Virtualbox,去官网下载一个最新版的,问题解决。
遇到了timeout的问题,连接校园网后解决。
随后登陆,进行一系列的操作后,成功。
四、课程心得
通过这学期课程的学习,对于java spring有了更加深刻的体会,对于前后端的交互、接口的设计、数据库的连接、数据库的操作、spring 注解的使用有了很大的提升。
在这次课程中,经历了一个完整的迭代的开发过程,通过学习——>实践的模式,大大提高了我对知识的理解和动手实践能力,在不断的bug调试中,丰富了编写java的经验。