(结尾附有源码地址)
一、功能需求
二、关键技术
1.Spring boot
1.1什么是SpringBoot
Spring Boot 是所有基于 Spring 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架(不知道这样比喻是否合适)。
1.2、SpringBoot四个主要特性
1、SpringBoot Starter:他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中;
2、自动配置:SpringBoot的自动配置特性利用了Spring4对条件化配置的支持,合理地推测应用所需的bean并自动化配置他们;
3、命令行接口:(Command-line-interface, CLI):SpringBoot的CLI发挥了Groovy编程语言的优势,并结合自动配置进一步简化Spring应用的开发;
4、Actuatir:它为SpringBoot应用的所有特性构建一个小型的应用程序。但首先,我们快速了解每项特性,更好的体验他们如何简化Spring编程模型。
2.MyBatis
MyBatis 是一款优秀的 ORM(Object Relational Mapping,对象关系映射)框架,它可以通过对象和数据库之间的映射,将程序中的对象自动存储到数据库中。它是 Apache 提供的一个开源项目,之前的名字叫做 iBatis,2010 年迁移到了 Google Code,并且将名字改为我们现在所熟知的 MyBatis,又于 2013 年 11 月迁移到了 Github。
MyBatis 提供了普通 SQL 查询、事务、存储过程等功能,它的优缺点如下。
优点:
a) 相比于 JDBC 需要编写的代码更少
b) 使用灵活,支持动态 SQL
c) 提供映射标签,支持对象与数据库的字段关系映射
缺点:
a) SQL 语句依赖于数据库,数据库移植性差
b) SQL 语句编写工作量大,尤其在表、字段比较多的情况下
总体来说,MyBatis 是一个非常优秀和灵活的数据持久化框架,适用于需求多变的互联网项目,也是当前主流的 ORM 框架。
2.1 MyBatis 重要组件
MyBatis 中的重要组件如下:
Mapper 配置:用于组织具体的查询业务和映射数据库的字段关系,可以使用 XML 格式或 Java 注解格式来实现;
Mapper 接口:数据操作接口也就是通常说的 DAO 接口,要和 Mapper 配置文件中的方法一一对应;
Executor:MyBatis 中所有的 Mapper 语句的执行都是通过 Executor 执行的;
SqlSession:类似于 JDBC 中的 Connection,可以用 SqlSession 实例来直接执行被映射的 SQL 语句;
SqlSessionFactory:SqlSessionFactory 是创建 SqlSession 的工厂,可以通过 SqlSession openSession() 方法创建 SqlSession 对象。
2.2 MyBatis 执行流程
MyBatis 完整执行流程如下图所示:
MyBatis 执行流程说明:
1.首先加载 Mapper 配置的 SQL 映射文件,或者是注解的相关 SQL 内容。
2.创建会话工厂,MyBatis 通过读取配置文件的信息来构造出会话工厂(SqlSessionFactory)。
3.创建会话,根据会话工厂,MyBatis 就可以通过它来创建会话对象(SqlSession),会话对象是一个接口,该接口中包含了对数据库操作的增、删、改、查方法。
4.创建执行器,因为会话对象本身不能直接操作数据库,所以它使用了一个叫做数据库执行器(Executor)的接口来帮它执行操作。
5.封装 SQL 对象,在这一步,执行器将待处理的 SQL 信息封装到一个对象中(MappedStatement),该对象包括 SQL 语句、输入参数映射信息(Java 简单类型、HashMap 或 POJO)和输出结果映射信息(Java 简单类型、HashMap 或 POJO)。
6.操作数据库,拥有了执行器和 SQL 信息封装对象就使用它们访问数据库了,最后再返回操作结果,结束流程。
三、系统设计
数据库表结构
总共有四张表
1.s_homework表(老师发布作业记录表)
2.s_student表(学生信息表)
3.s_student_homework表(学生提交作业记录表)
4.s_teacher表(老师信息表)
代码框架
数据实体类(Model)
新建四个类(Homework类、Sudent类、StudentHomework类、Teacher类)。这样可以将表中的一条记录抽象成java中的一个对象。详情了解对象关系映射。
每个类里面主要是申明与数据库对应的变量。结构类似于:
private Long id;
数据库映射类(dao)
1.HomeworkDao接口
该接口中有3个方法:
- addHomework(Homework h)
- editHomework(Long homeworkId, Long num)
- List selectAll3()
2.StudentDao接口
该接口中有4个方法:
- addStudent()
- deleteStudent()
- List find2(Long studentId)
- List selectAll2()
3.StudentHomeworkDao接口
该接口中有7个方法:
- addHomework(StudentHomework sh)
- deleteHomework(Long studentId)
- deleteHomework2(Long studentId,Long homeworkId)
- editHomework(Long studentId, Long homeworkId, Long score)
- StudentHomework find1(Long studentId, Long homeworkId)
- List find4(Long homeworkId)
- List selectAll1()
4.TeacherDao接口
该接口中有2个方法:
- List find3(Long id, String pw)
- boolean addTeacher(Teacher t)
前端框架
前端采用之前开发使用的框架修改而成,包括css样式。
业务逻辑
一、首页
选择角色
这里的每一个按钮其实只是一个类似于超链接的东西,点击后会跳转到相应的注解类。
二、老师端
选择老师角色后进入老师端登录界面
如果老师还没有账号就先点击注册,会跳转到注册界面
如果已经注册,那么直接输入工号和密码,点击登录即可进入老师端的操作界面。
1.老师添加学生
点击添加学生按钮后进入添加学生界面。如图在上方显示所有学生信息,下方老师填写要添加的学生的学号和姓名,点击添加即可。
2.老师删除学生
点击删除学生按钮后进入删除学生界面。
老师在要删除的学生右边点击删除按钮即可删除该名同学。
3.老师查看学生和作业列表
点击查看学生和作业列表按钮后进入查看学生和作业列表界面。如图上方显示学生列表,下方显示作业列表。
4.老师布置作业
点击布置作业按钮后进入布置作业界面。如图所示,会在界面上方先显示所有已经布置过的作业,然后再下方提供发布作业的内容,填好作业要求后点击布置即可。
5.老师检查作业
点击检查作业按钮后进入检查作业列表界面。
如图所示,界面会显示所有已经布置过的作业,包括作业号、作业题目、作业要求、创建时间、该作业已提交的个数,以及检查作业按钮。
老师在想检查的作业那点击检查,即可进入检查作业列表。界面上会出现所有关于该作业的提交情况,再点击检查即可批改作业。
老师批改完打好分数后点击提交即可。
三、学生端
选择学生角色后进入学生登录界面,由于老师添加学生时会自动注册学生账号,所以没做学生注册按钮。
上图是学生登录界面。学生输入学号后即可进入学生端操作界面。下面展示使用学号为17301001学生登录的情况。
如图所示,会在界面中显示所有已经布置的作业,并且显示该名同学各次作业的状态。有未提交和已提交两种状态。已提交中会显示分数,如果尚未批改则会显示null。
1.提交作业
对于未提交的作业,在右方点击提交按钮,即可进入提交作业界面。填写好作业内容后点击提交按钮即可。
2.更新作业
对于已提交的作业,可以点击更新按钮更新作业。填写好新的作业内容后点击提交会自动覆盖之前的所有提交内容。
四、Docker
由于我使用的是Windows版的Docker,因此安装教程在这里就不多赘述了,
在这里我就讲述一下我将项目打包生成image的过程:
首先进入项目目录,在idea中利用maven工具
先使用clean操作,清空下环境,然后再使用install操作将项目打成Jar包
重点讲述一下docker的相关命令,在下载好docker之后,在控制台中输入docker -v出现以下内容说明docker安装成功。
安装好docker后,在idea中,创建DockerFile文件,以下是我的DockerFile文件的内容:
然后配置Docker属性
在这里可以看到DockerFile中指定的是我们本地DockerFile文件的路径,Image tag指定的是我们要生成的image的标签,Container name指定我们容器的名字,都配置好之后就点击确定,然后开始运行DockerFile,或者使用docker插件点击build能自动执行操作。
这里可以看到生成的镜像,这时我们转到终端用docker images命令查看docker中的镜像信息的时候可以看到,已经存在我们刚刚生成的镜像了。
然后我们打下tag.
可以看到生成了另一个镜像id和之前的那个一样,只有名字不同。
最后我们登录远程服务器,并将打好标签的 image push到远程的服务端。
最终版本的镜像名为:17301137-hwsystemfinaldemo:0.0.1-SNAPSHOT
直接拉取下来,执行run命令即可。另外关于数据库的配置,这里没有整合进docker中,我提供了sql文件,直接在数据库中运行sql文件即可创建对应的数据库。
完整项目GitHub地址:https://github.com/gittxy/JavaEEFinalProject