JavaEE——作业管理系统期末总结

一、新建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

在这里插入图片描述

三、运行中遇到的问题

  1. Jsp与Springboot出现404问题
    解决方法:没有定义jsp目录位置
  2. 出现505问题
    @responseBody可以替换为@ModelAttribute,传输类型问题
  3. @Delete(“delete from s_student_homework where id in (${ids})”)使用in的时候不能用#{}来获取参数
  4. Docker安装

因为Windows版本限制,而且没有使用过Linux,所以采用了Docker Toolbox下载地址来安装。

安装好后,打开Docker Quickstart Terminal,因为之前安装过Git,所以程序找不到,要在属性里面目标设置为本地的bash.exe位置。
运行中,又遇到了以下问题。
在这里插入图片描述修改start.sh文件不可行。
最终解决的方法是:卸载掉默认装的VM Virtualbox,去官网下载一个最新版的,问题解决。
在这里插入图片描述遇到了timeout的问题,连接校园网后解决。
随后登陆,进行一系列的操作后,成功。
在这里插入图片描述

四、课程心得

通过这学期课程的学习,对于java spring有了更加深刻的体会,对于前后端的交互、接口的设计、数据库的连接、数据库的操作、spring 注解的使用有了很大的提升。
在这次课程中,经历了一个完整的迭代的开发过程,通过学习——>实践的模式,大大提高了我对知识的理解和动手实践能力,在不断的bug调试中,丰富了编写java的经验。

五、Github地址

  • 4
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值