,,Java实现学生管理系统详解

,,Java实现学生管理系统详解

本文主要详细介绍了Java学生管理系统,具有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。

目录

摘要

这是大二的课程(或者学生管理系统……)。虽然理论上是四个人一组完成的,但是注意,这个“但是”还是我自己的责任……基本上所有的代码和文档都是我自己写的,导致我一开始就肝肠寸断吐血,这也是后来网页版部分功能没有完成的原因。

学生管理系统(Java版)

该项目分为一个由JavaSwing编写的GUI桌面应用程序和一个半成品Web应用程序。下图显示了项目的整体功能结构。

项目介绍

JavaSwing在这里使用了MyBatis Spring的框架组合,后来发现在Swing开发的程序中使用Spring框架似乎是一个错误。

此外,JavaSwing版本中可能存在一些逻辑上未知的bug。

显示(部分)

1.登录模块

2.系统设置模块

3.学生管理模块

添加学生

学生名单

4.班级管理模块

添加类别

班级管理

5.性能管理

成绩统计

6.网络版

点击跳转到浏览器的http://localhost:8080网址。

使用说明

用IDEA打开项目。该项目的结构如下:

项目启动时,在视图包中运行LoginFrm。

遇到的问题

使用Spring进行依赖注入时遇到的问题

Swing是一个用于Java GUI开发的包。我在课程设置中使用Spring管理容器,但是在使用Spring注释注入容器依赖时出现了一个问题。依赖注入为空,错误如下:

线程“AWT-EventQueue-0”中的异常java.lang.NullPointerException

位于com . view . log in frm . loginact(log in frm . Java:187)

at com . view . log in frm2 . action performed(log in frm . Java:96)

在百度搜索了半天没有发现问题,排除了Spring配置文件写错,或者@Service注释不存在的情况下,我找到了一个在线解释,如下:

在多线程时使用 @Autowired 总是获取不到 bean。

原因是: NewThread不在Spring容器中,因此无法获取Spring中的bean对象。

JavaSwing不是线程安全的。项目的某些部分是多线程的,许多UI线程并行运行。因此,Spring注入在这些线程中会失败,因为它们不是由Spring管理的线程。

Spring在多线程的情况下不允许使用注释注入依赖,所以我们只能手动获取想要的bean对象。代码如下:

private final application context context=new classpathmlaplicationcontext(' spring . XML ');

private final AdminService AdminService=(AdminServiceImpl)context . get bean(' AdminServiceImpl ');

其实可以通过配置线程池来管理,但是我对Swing不熟悉,不知道它运行时有哪些线程。

一开始没想到这个问题。早知道我就不会在Swing上用Spring了……因为我要手动获取视图层每个类的依赖,这和实际用singleton模式获取MyBatis的依赖没什么区别。用Spring比较麻烦。

Mybatis使用HashMap作为结果集出现的问题

写查找指定的签到方法时,我用了ListHashMapString,String作为返回值,但是显示错误。第一次显示空指针错误时,我将@Results结果集配置如下:

@结果({

@Result(property='key ',column='attendance_num ',jdbcType=JdbcType。整数),

@Result(property='value ',column='attendance_date ',jdbcType=JdbcType。VARCHAR)})

但是显示格式转换错误,于是我在控制台上输出查询结果,发现结果是这样的。

[{value=2018-05-17,key=1},

{value=2018-04-17,key=1},

{value=2018-04-18,key=1},

{value=2018-04-19,key=3},

{value=2018-04-20,key=1},

{value=2018-04-21,key=1},

{value=2018-05-03,key=1}]

HashMap中的值从JSON string变成了xxx=xxx,property属性值对应的是entity类的属性,但是HashMap中的key和vlaue不是属性(我以为错了),所以Mybatis此时会自己设置一个属性名,所以变成了上面的结果。不要问为什么没有用xml文件的形式。当时你没有足够的时间,只是为了方便使用评论。

解决方法:

重新处理上面的结果值,赋给HashMap。

删除带外键关联的数据时出现的问题

项目中的服务图层报告了如下错误:

无法删除或更新父行:外键约束失败(` ttms`.`s_attendance `,约束` student_attendance_foreign `外键(` student_id `)引用` s _ student `( ` id `);嵌套异常是Java . SQL . sqlintegrityconstraintviolationexception:无法删除或更新父行:外键约束失败(` ttms`.` s_attendance `,约束` student_attendance_foreign `外键(` student_id `)引用` s_student` (`id `))

检查错误信息,问题出在Dao层,一个delete语句有问题。分析原因后发现设置了外键关联,导致我们无法删除这段数据。

解决方法:

在删除数据之前设置外键是无效的,如下所示:

set foreign _ key _ checks=0;

然后,您可以执行delete语句。

删除后,将外键设置为有效,如下所示:

set foreign _ key _ checks=1;

这完美地删除了这个记录。

JavaSwing

这里的JavaWeb使用SpringBoot Spring Data JPA的框架组合,页面由Thymeleaf显示,页面上有一个使用ECharts进行数据可视化的统计页面。

说到Web这个半成品,它已经实现的功能主要有登录、注销、修改密码、学生管理、班级管理、成绩管理的成绩统计等。此外,它使用与JavaSwing版本相同的数据库,因此它们以前的数据实际上是可互操作的。

总结:虽然页面有点丑,但是可以作为模板开发。

功能展示(部分)

1.登录界面

2.学生管理

学生名单

添加学生

3.班级管理

根据考试成绩分等级排列的投考者的名单

添加类别

4.成绩统计

JavaWeb

项目结构图:

如果开始,只需直接进入DemoApplication类,右键单击即可开始。

遇到的问题

使用JPA更新数据库时遇到的问题

在使用Spring Data JPA作为Web端持久层的内容时,我遇到了如下错误:

执行更新/删除查询

百度查了一下,发现JPA在进行更新或者删除操作的时候,要在Dao或者服务层添加@ Transactiona l A L注释,也就是说这是一个事务级的操作,相当于JPA的一个使用规范,因为JPA要求‘没有事务支持就不能进行更新和删除操作’。

使用说明

本文到此为止。希望能帮到你,也希望你能多关注我们的更多内容!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: