作业管理系统
功能简介
这就是我们需要实现的功能。
下面我们创建一个新的项目,这是我给项目加的依赖 有Web Thymeleaf MybatisFramework MysqlDriver
创建好项目之后,我先做的是通过mybatis的自动生成功能,根据我的数据库来进行自动生成mapper,entity等。
首先介绍一下我的数据库
数据库整体:有四张表组成
提交作业的表s_student_homework
作业表s_homework
学生表s_student
老师表s_teacher
创建完成数据库之后,我们就可以着手进行mybatis generator了
首先依赖与generator有关的东西
<plugins>
<!-- mybatis代码生成插件 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<!--配置文件的位置-->
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
根据配置文件的位置我们建一个配置文件
generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--mysql 连接数据库jar 这里选择自己本地位置;
如果不知道maven本地仓库地址,可以使用EveryThing工具全局搜索mysql-connector-java,找到jar包位置;
也可以手动下载一个jar放在指定位置,进行引用。
-->
<classPathEntry location="D:/server/maven/repository/mysql/mysql-connector-java/5.1.46/mysql-connector-java-5.1.46.jar"/>
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释,true:是,false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/school" userId="root"
password="123456">
</jdbcConnection>
<!-- 指定javaBean生成的位置
targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制;
targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录
-->
<javaModelGenerator targetPackage="com.example.mybatis.entity" targetProject="src/main/java">
<!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false;如果多个数据库改为true分目录 -->
<property name="enableSubPackages" value="false"/>
<!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 指定mapper映射文件生成的位置
targetPackage、targetProject同javaModelGenerator中作用一样-->
<sqlMapGenerator targetPackage="com.example.mybatis.mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- 指定mapper接口生成的位置
targetPackage、targetProject同javaModelGenerator中作用一样
-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mybatis.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!-- 指定数据库表
domainObjectName:生成的domain类的名字,当表名和domain类的名字有差异时一定要设置,如果不设置,直接使用表名作为domain类的名字;
可以设置为somepck.domainName,那么会自动把domainName类再放到somepck包里面;
-->
<table schema="" tableName="s_student" domainObjectName="s_student"/>
<table schema="" tableName="s_teacher" domainObjectName="s_teacher"/>
<table schema="" tableName="s_homework" domainObjectName="s_homework"/>
<table schema="" tableName="s_student_homework" domainObjectName="s_student_homework"/>
</context>
</generatorConfiguration>
之后通过点击maven下的plugin按钮,就可以自动生成了
这样就产生了我们需要的entity和mapper
下面就是核心功能的实现。后端就是写service和serviceImp 利用example和cretiera的组合来进行你需要的操作。
实现好后端的server之后,在Control中写需要的页面跳转。并根据写好的service来实行一些操作。
由于本次使用的是thymeleaf,所以不能用@RestController 注解只能用@Controller注解,要不然跳转不过去相应的html界面。这也是需要注意的一点。
下面是项目结构
下面的好多html就是一些前端的页面。能提到的就是,为了让特定的学生根据学生ID得到自己写过的作业,来进行修改。所以在学生登录时读取了学生ID作为cookie。并在后来的展示作业函数中,以值传入进去,就得到了相应的作业列表。
这是html实现的存学生id cookie
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<style type="text/css">
td, th {
text-align: center;
}
</style>
<title>学生登录</title>
<script type="text/javascript">
function SetCookie(cookieName,cookieValue) {
document.cookie = cookieName + "=" + escape(cookieValue);
}
function slogin() {
var s_id = $("s_id").value;
var s_password = $("s_password").value;
SetCookie("s_id",s_id);
}
function $(id) {
return document.getElementById(id);
}
</script>
</head>
<body>
<div class="container">
<center><h3>学生登录</h3></center>
<form th:action="@{/student/Login}" method="post">
<div class="form-group">
<label for="s_id">学生Id:</label>
<input type="text" class="form-control" id = "s_id" name="s_id" placeholder="请输入学生Id" th:field="${student.studentid}">
</div>
<div class="form-group">
<label for="s_password">学生密码:</label>
<input type="text" class="form-control" id="s_password" name="s_password" placeholder="请输入学生密码" th:field="${student.studentpassword}">
</div>
<div class="form-group" style="text-align: center">
<a th:href="@{/student/Login}"> <input class="btn btn-primary" type="submit" onclick="slogin()" value="提交"/></a>
<a href="addHomework.html" th:href="@{/studentLogin}"> <input class="btn btn-default" type="reset" value="重置"/></a>
<a href="list.html" th:href="@{/index.html}"> <input class="btn btn-default" type="button" value="返回"/></a>
</div>
</form>
<form th:action="@{/studentRegister}" method="post" role="from" class="smart-green" >
<input type="submit" class="button" value="注册"/>
</form>
</div>
</body>
</html>
以学生4登陆后,得到4写过的作业。并且可以进行修改。
下面展示程序效果
学生登陆界面
这是学生登陆后可进行的操作
学生查看/提交作业
学生想要修改已提交的作业
学生修改自己已提交过的作业成功:
这个页面是学生提交新的作业
学生提交新的作业成功:
老师登陆后可以添加新的作业/修改原有的作业
新作业布置成功
老师查看所有已提交的作业列表