本文主要详细介绍了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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。